Corredor

ウェブ、プログラミングの勉強メモ。

ProxyCommand を使って踏み台サーバ経由で SSH 接続するのをコマンド1発にする

「手元の PC → 踏み台サーバ → 目的のサーバ」と通信を経由して SSH 接続したい。

以前、nc コマンドを「踏み台サーバ」にインストールしておき、~/.ssh/config ファイルを書くことで、コマンド1発で SSH 接続する方法を紹介した。

neos21.hatenablog.com

今回は、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

HostNameUserPortIdentityFile の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 のせいだった。

neos21.hatenablog.com

自分は ~/.bashrc で、

alias ssh='sshrc'

というエイリアスを設定していたのだが、コレがどうも良くなかったみたいで、このエイリアスを削除してやると、コマンド一発でも上手く動くようになってくれた。brew install openssh とかなんとかやってグニグニしてたけど関係なかった。

Infrastructure as Code ―クラウドにおけるサーバ管理の原則とプラクティス

Infrastructure as Code ―クラウドにおけるサーバ管理の原則とプラクティス