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

  • 55
    Like
  • 0
    Comment
More than 1 year has 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経由接続ができない。