Open1

SSHフォワーディングと多段SSH

堀江誠一堀江誠一

表題の2つが非常に紛らわしく、調査に手間取ったのでメモしておく。

前提として次の3台のコンピュータがあるとする。

  1. local
  2. near-server
  3. 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を私が使うことになる日は来ないと思われるので、具体的な方法は調べていない。