Edited at

Fabricで多段SSHをやる

More than 1 year has passed since last update.


Fabricで多段SSHをやる

詳しくないので適切な用語を把握していませんが、

ローカルからサーバー1を経由してサーバー2にログインして操作をしたいときに必要になります。

今回は、AWSでVPC内にパブリックサブネットとプライベートサブネットを用意しており、プライベートサブネットに対してfabricで操作をしたかったのでパブリックサブネット内のinstanceを経由してプライベートサブネット内のinstanceを操作します。


前提条件

面倒だったので、ゲートウェイとして扱うサーバーもトンネル先のサーバーも


  • 同じ秘密鍵

  • 同じユーザー・グループ名

とします。。。


スクリプト

サンプルなので、ls -alだけにします...

host1はパブリックサブネットにおいてあるinstanceのIPアドレスとします。

host2はプライベートサブネットにおいてあるinstanceのIPアドレスとします。

処理対象をいつものhostにし、env.gatewayにトンネル先のエンドポイントを書きます。それだけですw


fabfile.py

from fabric.api import env, run

from fabric.decorators import task, hosts

# サーバーの設定
env.user = "ユーザー名"
env.group = "グループ名"
env.key_filename = "秘密鍵へのパス"
env.use_ssh_config = True

@task
@hosts("host1")
def sample_task():
env.gateway = "host2"
run("ls -al")


おわり