(小ネタ)SOCKSプロキシとSSH踏み台サーバ経由でSSHする

SOCKSプロキシとSSH踏み台を経由してSSHするワンライナーを書きました。
2020.03.09

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは、曜日ごとに部位を変えて遊べば毎日リングフィットやっても疲れないことに気づいた佐々木です。

SOCKSプロキシと踏み台サーバ経由でSSHしたい

今回は早速本題です。以下のような構成でワンライナーでSSHしたい場合どうなるのかやってみました。

  1. 手元のマシンからSOCKSプロキシ(sock-proxy)を経由して踏み台サーバ(bastion)にSSHする
  2. 踏み台サーバを経由して目当てのサーバ(server)にSSHする

これをワンライナーで行うには以下のようになります。

ssh -o \
ProxyCommand='ssh -i ~/.ssh/your_private_key.pem -W %h:%p -o ProxyCommand=\'nc -x sock-proxy:1080 %%h %%p\' ec2-user@bastion' \
-i ~/.ssh/another_private_key.pem ec2-user@server

SOCKSプロキシ、SSHサーバをそれぞれ単独で踏み台でするコマンドをネストしただけなのですが、強いて言えば次の2点がポイントです(ハマったところともいう)

  1. ネストしている内側のProxyCommand全体をシングルクオートで囲む時にはバックスラッシュでエスケープします\'
  2. 同様にネストしている内側のコマンド内の%h %p%%h %%p のように%を重ねてスケープします

最後に

多段SSHとリングフィットでリモートワークが捗りますね。