netcatを使って踏み台を踏む手順を省く

拝啓

全国1億5千万の踏み台サーバ好きのみなさま
元気に踏み台サーバを踏まれているでしょうか。

社内で利用していながらよく理解していなかったので
改めてカジュアルに学び直したメモを書いておきます。

参考

クラアント -> 踏み台サーバ -> 対象サーバ

という時に、毎回踏み台サーバに入って、対象サーバに入るのは面倒くさいので


「~/.ssh/config」へ

Host fumidai
    Hostname 203.0.113.1
    User kenjiskywalker

Host hoge-web01
    Hostname 203.0.113.101
    User kenjiskywalker
    ProxyCommand ssh fumidai nc -w 300 %h %p

このように設定することによって

$ ssh hoge-web01 

このコマンドだけで、fumidaiを踏んでhoge-web01サーバへ
ログインしてくれるのである。実に助かる。

踏み台サーバを.ssh/configに記載しない場合に気を付けないといけないのは

Host hoge-web01
    Hostname 203.0.113.101
    User kenjiskywalker
    ProxyCommand ssh 203.0.113.1 nc -w 300 %h %p

とやってしまってうと

Permission denied (publickey,gssapi-with-mic).
ssh_exchange_identification: Connection closed by remote host

とエラーになってしまう。原因は簡単で

ssh 203.0.113.1 => kenjiskywalker@203.0.113.101 ということで
踏み台サーバのログインアカウントを指定し忘れている状態になる。

というのを1人であれれーってやってた。恥ずかしい。。

色々調べていると、最近ではnetcat使うよりもsshの-Wオプション使う人が多いっぽい。
-w付けないと居残り組が発生する事象もないし、踏み台側にnetcat入れなくても
大丈夫なので、これから始める人はssh -Wで良さそう。

netcat
Host hoge-web01
    Hostname 203.0.113.101
    User kenjiskywalker
    ProxyCommand ssh -l kenjiskywalker 203.0.113.1 nc -w 300 %h %p
ssh -W
Host hoge-web01
    Hostname 203.0.113.101
    User kenjiskywalker
    ProxyCommand ssh -W %h %p -l kenjiskywalker 203.0.113.1 


また、同一セグメントに対しても
ホスト名を一意に設定して、相互認識できるようにしておけば

Host fumidai
    Hostname 203.0.113.1
    User kenjiskywalker

Host hoge-*
    User kenjiskywalker
    ProxyCommand ssh fumidai nc -w 300 %h %p

こんな感じで楽ができるって知った。
@fujiwara++

netcat自体は原始的であるが故に強力で
発想さえあれば色々と面白いことができるのがいい。

中2要素がふんだんに詰まっているのがいい。

( '~')