ssh/scp多段接続〜踏み台サーバを越えて〜


概要

多段接続したいと思った時、都度自前のノートからコピペしていたのでノート無しには何もできなくなってしまった。

複数サーバを経由しなければならない時、
以下のように1台づつファイルを転送するオペレーションになりがちである。

通常転送

これでは送信元サーバで転送コマンドを叩くだけでなく、
踏み台サーバでも転送コマンドを叩かなければならない。
サーバ同士の関わりが強い状態なので、cronに処理を仕込もうにも非常にやりにくい。

多段転送

scpのProxyCommandを使った多段接続機能を使えば
転送処理の為だけにわざわざ踏み台サーバに入る必要はない。

scp -r -o "ProxyCommand ssh -i ~/.ssh/key ユーザー@踏み台 -W %h:%p" testdir ユーザー@送信先:/tmp/.

もしくは

scp -r -o "ProxyCommand ssh -i ~/.ssh/key ユーザー@踏み台 nc %h %p" testdir ユーザー@送信先:/tmp/.

上記2つの違いは、-Wオプションを使うか、nc (netcat)を使うかの違いである。
ncオプションの場合、踏み台サーバにもncが使えるようにしておく必要がある。
一方で-Wオプションの場合は、そこを意識しなくて良い。
%h %pはそれぞれホスト、ポートを表している。

※上記コマンドは鍵認証を用いている為、パスワード認証で行う場合は -i ~/.ssh/key を適宜削除すること。

注意事項

sshで接続すると接続元に書かれる
.ssh/known_hostsは踏み台には書かれず、送信元に書かれる。

複数の環境を持っており、その数だけ踏み台サーバがあり、
送信先のIPが同じ(192.168.1.201)の場合、
送信元の ~/.ssh/known_hosts ファイルをメンテナンスする必要がある。