SSHフォワーディングと多段SSH
表題の2つが非常に紛らわしく、調査に手間取ったのでメモしておく。
前提として次の3台のコンピュータがあるとする。
- local
- near-server
- far-server
localはクライアントPCで、ユーザーがキーボードとモニタで作業している。localからnear-serverへはSSHでログインできる。
SSHフォワーディング
localからnear-serverにSSHでログインした状態で、さらにnear-serverからfar-serverにログインしたいときにどうするか。前提としてlocalからfar-serverへもnear-serverへの場合と同じSSH秘密鍵でログインできるものとする(つまりfar-serverとnear-serverは同じ公開鍵を持っている)。
愚直にやるならばnear-serverの~/.ssh/ にlocalのSSH秘密鍵をコピーすることになる。が、秘密鍵が複数のコンピュータにばらまかれるのはよくない。できればlocalにだけ置きたい。
SSHフォワーディングはこの問題に関する解決策。
~/.ssh/config に以下のように書いておく。localのid_ed25519には秘密鍵が入っているものとする。
Host near-server
HostName ...
User ...
IdentityFile ~/.ssh/id_ed25519
ForwardAgent yes
この状態でnear-serverからfar-serverにSSH接続を行うと、SSHエージェントがlocalから秘密鍵を安全に持ってきてfar-serverとの接続に利用する。秘密鍵はファイルに保存されない。これで秘密鍵のファイルをばらまくことなくnear-serverからfar-serverにSSH接続できる。
多段SSH
これはSSHフォワーディングとは状況が反対のケース。安全上の問題でfar-serverがnear-serverからしか接続を許さないとする。この場合、localからnear-serverへのSSH接続、near-serverからfar-serverへのSSH接続という多段接続を一気呵成にやってしまおうというもの。
localから
ssh far-server
とやると、自動的にnear-serverを踏み台としてfar-serverに接続する。
多段SSHを私が使うことになる日は来ないと思われるので、具体的な方法は調べていない。