Edited at

Ansibleの踏み台を経由した実行について

More than 3 years have passed since last update.


踏み台経由でSSHを通して実行する

[mydev01] --> [mydev02] --> [mydev03]

サーバ
ユーザ
役割

mydev01(192.168.33.31)
vagrant01
Ansible実行サーバ

mydev02(192.168.33.32)
vagrant02
踏み台サーバ

mydev03(192.168.33.33)
vagrant03
Ansible実行対象サーバ

便宜上ホスト名の番号をユーザ名の後ろにつけます。


ssh鍵が設定できていない状態で踏み台経由ログイン

mydev01から踏み台(mydev02)を経由してmydev03にアクセス

[vagrant01@mydev01]

$ vi sshconfig.vagrant01.mydev01_vagrant02.mydev02
=======================
Host *
IdentityFile /home/vagrant01/.ssh/id_rsa
ProxyCommand ssh -W %h:%p -w 120 vagrant02@192.168.33.32
=======================


  • Host * で、全てのホストに対して適用

    ->「HOST 192.*」のようにアドレスで実行先ホストを限定できる。

    -> 逆引きできない環境の場合は/etc/hostsファイルなどで別名をつけ、その別名を使ってアクセスしようとしてもProxyは使われない。

    例) $ ssh -F sshconfig.vagrant01.mydev01_vagrant02.mydev02 vagrant03@mydev03


  • IdentityFileで、mydev01のvagrant01ユーザの秘密鍵を指定


  • ProxyCommandで、vagrant02ユーザで192.168.33.32(mydev02)の踏み台サーバを経由する


[vagrant01@mydev01]

$ ssh -F sshconfig.vagrant01.mydev01_vagrant02.mydev02 vagrant03@192.168.33.33
vagrant02@192.168.33.32's password:
vagrant03@192.168.33.33's password:


  • mydev01からユーザvagrant03で192.168.33.33(mydev03)にssh

  • 最初に192.168.33.32(mydev02)でvagrant02のパスワードを求められる

  • 次に192.168.33.33(mydev03)でvagrant03のパスワードを求められる

この場合、パスワードを聞かれずに開発サーバにログインするには


  • mydev01のvagrant01ユーザの公開鍵を踏み台サーバ(mydev02)のvagrant02ユーザの.sshに置く

  • mydev01のvagrant01ユーザの公開鍵をAnsible実行サーバ(mydev03)のvagrant03ユーザの.sshに置く

踏み台サーバ(mydev02)の秘密鍵、公開鍵は使っていない。


ansibleでProxy経由

[vagrant01@mydev01]

export ANSIBLE_SSH_ARGS=' -F sshconfig.vagrant01.mydev01_vagrant02.mydev02'

上記環境変数を設定。フルパスでファイルを指定する方が都合良いかも。

$ ansible-playbook -i hosts ansible_test.yml -c ssh

Cent6.5現在、デフォルトのSSHが若干古いので -c ssh を指定しないと接続にparamikoが使われてProxy経由接続ができない。