踏み台経由で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経由接続ができない。