SSHキーセットを生成し、それを既知のホストにアップロードするスクリプトを作成しています。これは、各デバイスにキーが必要な場合に便利です。
新しいキーが生成された後にホストにアップロードするオプションを追加しました。しかし、bashはキーマネージャにキーをロードした後にエントリを送信したときにパスワードの入力を求めるメッセージや、フォールバックでパスワードの入力を求めるため、セッションなどを失ったようです。指定された鍵ファイル SSH 構成で。
スクリプトの関連部分は次のとおりです。
for host in "${hosts[@]}"
do
keyfile=$(printf "%s_keys/%s_%s_%s.id_ed25519" "$system" "$system" "$email" "$host")
ssh-keygen -t ed25519 -C $(printf "%s_%s" "$email" "$system") -P "$pw1" -f "$keyfile"
read -r -p "ssh new key to host $host? [y/n] " response
if [[ $response =~ ^([yY][eE][sS]|[yY])$ ]]
then
cat $keyfile.pub | ssh "$host" 'cat >> .ssh/authorized_keys'
fi
done
したがって、スクリプトを実行すると、次のような結果が表示されます。
The key fingerprint is:
SHA256:n8FWwe+TaHbWKwWVzCdIbAcfFnPTh8J0pukzuv9J4pQ a_b
The key's randomart image is:
+--[ED25519 256]--+
...
+----[SHA256]-----+
ssh new key to host [email protected]? [y/n] y
[email protected]'s password:
Permission denied, please try again.
しかし:
$ ssh myhost.com
You have new mail.
Last login: Sun Oct 30 03:28:07 2016 from 65.60.221.155
[myhost.com ~]
テストとして、私は以下のより簡単なスクリプトを書いて問題なく始めました。
$ cat test.bash
#!/bin/bash
echo test | ssh myhost.com 'cat >> test.txt'
$ ./test.bash
$ ssh myhost.com
You have new mail.
Last login: Sun Oct 30 03:33:25 2016 from 65.60.221.155
[myhost.com ~] cat test.txt
test
私のSSH情報を忘れてしまう長いスクリプトで私は何をしましたか?
答え1
まあ、私はこの間違いを犯したことについて少し愚かな感じがしますが、それを修正することについて考えるのは少し賢いです。非常に詳細なsshを提案した@Jajukeに感謝します。
私のSSH設定でホストの略語を設定しました。たとえば、次のようになります。
Host myhost
HostName myhost.com
User username
シェルでは、これを行うssh myhost
とすべてがうまく機能します。
しかし、私のスクリプトはホスト名を解決し、.ssh/known_hosts
完全なホスト名を持ちます。 P私のSSH設定ではmyhost.com
;myhost
もちろん、sshはパスワード認証に置き換えられます。
私の解決策は、私のエイリアスの横に完全なホスト名を含めるようにSSH設定を更新することでした。
Host myhost myhost.com
HostName myhost.com
User username
再び動作します!
これは誰かが同様の混乱を経験しないことを願っています。