Ansible 用の SSH ジャンプ ボックスの設定 - 接続できない

Ansible 用の SSH ジャンプ ボックスの設定 - 接続できない

私は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 コマンドを開始します。

  1. プロキシを使用して 10.0.0.175 に認証しようとしているため、bastion 上のキーと構成は必要ありません。
  2. プロキシを提供するもので、要塞への認証のみが可能である必要があります。

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

関連情報