ProxyCommand を使って踏み台サーバ経由で SSH 接続するのをコマンド1発にする
「手元の PC → 踏み台サーバ → 目的のサーバ」と通信を経由して SSH 接続したい。
以前、nc
コマンドを「踏み台サーバ」にインストールしておき、~/.ssh/config
ファイルを書くことで、コマンド1発で SSH 接続する方法を紹介した。
今回は、nc
コマンドを踏み台サーバにインストールすることなく多段 SSH する方法を紹介する。
目次
~/.ssh/config
で設定する方法
先に、~/.ssh/config
に接続先情報を記述する方式から紹介する。
Host target
HostName target-host
User target_user
Port 22
IdentityFile ~/.ssh/id_rsa
ProxyCommand ssh -W %h:%p -i ~/.ssh/id_rsa -p 22 bastion_user@129.000.0.00
HostName
・User
・Port
・IdentityFile
の4つの情報は、「目的のサーバ」に接続するための情報だ。
ProxyCommand
に書かれている ssh -W %h:%p
はお決まりのモノとして、-i
・-p
・ユーザ名@ホスト名
の情報で、「踏み台サーバ」への接続情報を指定している。
コマンド1発で書いてみる
~/.ssh/config
に接続先情報を書かず、コマンドラインで実現するなら次のとおり。
$ ssh -o ProxyCommand='ssh -W %h:%p -i ~/.ssh/id_rsa -p 22 bastion_user@129.000.0.00' -i ~/.ssh/id_rsa -p 22 target_user@target-host
MacOS で Bad stdio forwarding specification '%h:%p'
というエラーが発生する
自分がこのやり方に中々到達できなかったのは、ssh -o ProxyCommand=''
コマンドを使った時に、
Bad stdio forwarding specification '%h:%p'
というエラーが発生して、動作しなかったためだ。
~/.ssh/config
に設定を書いて実行すると上手く動いたので、何が原因なんだろうーと色々探していたのだが、原因は以前インストールした sshrc
のせいだった。
自分は ~/.bashrc
で、
alias ssh='sshrc'
というエイリアスを設定していたのだが、コレがどうも良くなかったみたいで、このエイリアスを削除してやると、コマンド一発でも上手く動くようになってくれた。brew install openssh
とかなんとかやってグニグニしてたけど関係なかった。