
私はAnsibleを使ってパブリックIPアドレスを持たないAWSホストにデプロイしようとしています。ジャンプボックスにsshで手動でホストにアクセスでき、そのボックスからプライベートマシンにsshで接続できます。my machine-->bastion-->private server
このプレイブックは他のプレイと共有されるロールを使用するため、Ansible ネイティブ サポートを使用できるとは思えません。これらのロールは特定のインベントリ グループに依存します。これを設定すると、group_vars
これを AWS 以外のインフラにデプロイするためのプレイブックが機能しなくなります。
私の ssh 設定ファイルは次のようになります:
# Servers in availability zone A
Host 10.0.0.*
ProxyCommand ssh -W %h:%p bastion.example.com
IdentityFile ~/.ssh/key.pem
# Servers in availability zone B
Host 10.0.1.*
ProxyCommand ssh -W %h:%p bastion.example.com
IdentityFile ~/.ssh/key.pem
# The bastion host itself
Host bastion.example.com
User ubuntu
IdentityFile ~/.ssh/key.pem
ControlMaster auto
ControlPath ~/.ssh/ansible-%r@%h:%p
ControlPersist 5m
キーは要塞サーバーとプライベート サーバーで同じであることに注意してください。
実行しようとすると、ssh 10.0.0.175 -F /tmp/aws_bastion_ssh_config -vvv
次の出力が表示されます。
(venv) andrew@dell:~/projects/ansible-playbooks$ ssh 10.0.0.175 -F /tmp/aws_bastion_ssh_config -vvv
OpenSSH_7.2p2 Ubuntu-4ubuntu2.4, OpenSSL 1.0.2g 1 Mar 2016
debug1: Reading configuration data /tmp/aws_bastion_ssh_config
debug1: /tmp/aws_bastion_ssh_config line 6: Applying options for 10.0.0.*
debug1: Executing proxy command: exec ssh -W 10.0.0.175:22 bastion.example.com
debug1: permanently_drop_suid: 1000
debug1: key_load_public: No such file or directory
debug1: identity file /home/andrew/.ssh/key.pem type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/andrew/.ssh/key.pem-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.4
Permission denied (publickey).
ssh_exchange_identification: Connection closed by remote host
これを動作させるにはどうすればよいですか?
ジャンプ ボックスにキーが存在する必要がありますか? どのように設定すればよいですか?
ssh bastion.example.com -F /tmp/aws_bastion_ssh_config
編集: 詳細情報:- 明確にするために、要塞サーバーに到達すると、ジャンプ ボックスからプライベート マシンに接続できます。キーをそのサーバーにコピーし、プライベート マシンに接続します。理想的には、ジャンプ ボックスにキーを配置したくないのですが、ネットワークが正しく実行されていることを確認するためにそこに配置しただけです。ssh [email protected] -i ~/.ssh/key.pem
答え1
ProxyCommand では、完全に別個の 2 つの ssh コマンドを開始します。
- プロキシを使用して 10.0.0.175 に認証しようとしているため、bastion 上のキーと構成は必要ありません。
- プロキシを提供するもので、要塞への認証のみが可能である必要があります。
1. のコマンドは正常に動作しますが、2. のデバッグ出力が表示されません。解決可能な TLD を使用し、その他はすべて一般的な構成であるため、2. ではエラーは発生しませんが、構成からIdentityFile
およびUser
オプションが提供されていないため、必要な動作は行われません。別のキーまたはユーザーで認証され、bastion によって拒否されます (当然のことです)。
2. でも設定が読み取られるようにするには、次のようにそのオプションを明示的に渡します。
# Servers in availability zone A
Host 10.0.0.*
ProxyCommand ssh -vvv -F /tmp/aws_bastion_ssh_config -W %h:%p bastion.example.com
IdentityFile ~/.ssh/key.pem
# Servers in availability zone B
Host 10.0.1.*
ProxyCommand ssh -vvv -F /tmp/aws_bastion_ssh_config -W %h:%p bastion.example.com
IdentityFile ~/.ssh/key.pem
# The bastion host itself
Host bastion.example.com
User ubuntu
IdentityFile ~/.ssh/key.pem
ControlMaster auto
ControlPath ~/.ssh/ansible-%r@%h:%p
ControlPersist 5m
すべてが機能するはずです。以下で確認してください。
ssh -vvv -F /tmp/aws_bastion_ssh_config 10.0.0.175
次に、1と2の両方のフォームを削除します。デフォルトの場所に-vvv
移動すると、両方のオプションを削除できます(sshは次のように読み取ります)。/tmp/aws_bastion_ssh_config
-F
/etc/ssh/ssh_config
そして ~/.ssh/config files
)