
SSHとJumphostを使用すると、奇妙な動作が発生します。マシンAで設定が実行されたとき(cygwin, OpenSSH_7.1p1, OpenSSL 1.0.2d 2015年7月9日)マシンBでは機能しません(OpenSSH_6.7p1 Ubuntu-5ubuntu1.3、OpenSSL 1.0.1f 2014年1月6日)。 Ansibleは、Baschenホストを介してリモートマシンに接続するためにこの設定を使用する必要があります。
私は以下を持っていますssh.config
Host bastion
HostName a.a.a.a
ProxyCommand none
UserKnownHostsFile known_hosts
Host *
User user
Port 22
ForwardAgent yes
ProxyCommand ssh [email protected] nc %h %p
PasswordAuthentication no
UserKnownHostsFile known_hosts
これらのknown_hosts
ファイルは同じフォルダにあります。
呼ぶ
ssh bastion -F ssh.config
両方のコンピュータで動作します。しかし、
ssh [email protected] -F ssh.config
これはAマシンでのみ機能し、Bマシンでは機能しません。
The authenticity of host 'a.a.a.a (a.a.a.a)' can't be established.
ECDSA key fingerprint is ###.
プロキシコマンドを次のように変更してみました。
ProxyCommand ssh [email protected] -F ssh.config nc %h %p
これにより問題が解決しました。
ssh [email protected] -F ssh.config
これは両方のシステムで実行されるためです。ただし、設定もrsync
Ansibleによって実行され、他のデフォルトディレクトリで実行されるため、ssh.config
ファイルが見つかりません。移植性のために絶対パスを使用したくありません。これらのスクリプトは、ローカルコンピュータ(一部のWindowsでは付属cygwin
)で実行するか、リモートエージェントを使用する専用のビルドサーバーを介して実行する必要があります。
ProxyCommand
今は次のように設定しました。
ProxyCommand ssh -o UserKnownHostsFile=/dev/null \
-o StrictHostKeyChecking=no [email protected] nc %h %p
rsync
これはA + Bで動作しますが、/problemsがありますansible
。ログは以下を提供します。
msg: Warning: Permanently added 'a.a.a.a' (ECDSA) to the list of known hosts.
ホスト鍵の検証に失敗しました。
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.1]
TL; DRの初期設定では、ホストキーの設定に手動の手順が必要なため、ヘッドレスとして機能しません。代替案は以下のワークフローを中断します(rsync
)。他のオプションがありますか?
答え1
ホストキーのセキュリティを「解決する」方法は、ssh-keyscan
それを使用してファイルを作成し、known_hosts
ホストの信頼性を手動で確認せずに接続できることです。
次のように使用できます。
ssh-keyscan hostname > known_hosts
「少し」セキュリティが失われますが、信頼できる環境で実行されている場合は許可されます。