概要
「どんだけセキュリティ意識高めなの!?」というのは冗談で、 様々な事情があり4段SSH接続しなければいけない状況になった。
とてもやっていられないのでSSH鍵認証を駆使してコマンド一発で4段目まで入れるようにしたメモ。
多分来年には状況が変わっているので2018年版。
環境(登場人物)
- ローカル
- 1段目:踏み台サーバ1(step1)
- 2段目:踏み台サーバ2(step2)
- 3段目:踏み台サーバ3(step3)
- 4段目:目的地サーバ(step4)
実は鍵は共通でも良いけど上司に怒られるので予防の為に分けておく。
ポイント
- ~/.ssh/config書くのはローカルのみ
- 秘密鍵はローカルでのみ管理
- 経由するサーバは公開鍵を置くだけ
手順
cd ~/.ssh/
作業はここで行うのが楽。
ローカル環境で鍵作成。
ssh-keygen -C "step1の鍵" -f step1key -t ecdsa -b 256 -N ""
ssh-keygen -C "step2の鍵" -f step2key -t ecdsa -b 256 -N ""
ssh-keygen -C "step3の鍵" -f step3key -t ecdsa -b 256 -N ""
ssh-keygen -C "step4の鍵" -f step4key -t ecdsa -b 256 -N ""
パスフレーズなし。
楕円曲線暗号256bitが使えない環境の場合は「-t rsa -b 4096」辺りで。
step1key,step1key.pub
step2key,step2key.pub
step3key,step3key.pub
step4key,step4key.pub
が作成されます。
ローカルの.ssh/config設定。
Host step1
HostName step1.jp
User username1
IdentityFile ~/.ssh/step1key
Host step2
HostName step2.jp
User username2
ProxyCommand ssh -W %h:%p step1
IdentityFile ~/.ssh/step2key
ForwardAgent yes
ForwardX11 yes
ServerAliveInterval 300
ForwardX11Timeout 596h
ControlMaster auto
ControlPath ~/.ssh/mux-%C
ControlPersist 10
Host step3
HostName step3.jp
User username3
ProxyCommand ssh -W %h:%p step2
IdentityFile ~/.ssh/step3key
ForwardAgent yes
ForwardX11 yes
ServerAliveInterval 300
ForwardX11Timeout 596h
ControlMaster auto
ControlPath ~/.ssh/mux-%C
ControlPersist 10
Host step4
HostName step4.jp
User username4
ProxyCommand ssh -W %h:%p step3
IdentityFile ~/.ssh/step4key
ForwardAgent yes
ForwardX11 yes
ServerAliveInterval 300
ForwardX11Timeout 596h
ControlMaster auto
ControlPath ~/.ssh/mux-%C
ControlPersist 10
step1に公開鍵配置。
ssh-copy-id -i step1key.pub step1
まだ鍵置いてないので最初はパス聞かれます。
同様にstep2,step3,step4と置いていく。
ssh-copy-id -i step2key.pub step2
ssh-copy-id -i step3key.pub step3
ssh-copy-id -i step4key.pub step4
ssh-copy-idが使えない場合はこれで代用。
cat step1key.pub | ssh username1@step1 "mkdir -p ~/.ssh; cat >> ~/.ssh/authorized_keys"
設定完了。
ssh step4
これで4段目に入れます。
便利すぎてもう仕事終わった気分。
鍵認証されない時
permissionを疑う
~/.ssh は 700
~/.ssh/authorized_keys は 644
~/.ssh/秘密鍵 は 600
/home/username は 755
/etc/ssh/sshd_config の「ForwardX11 no」になってない?
設定変更してsshd再起動。できない場合、管理者に頼む。駄目なら諦めてローカルからはコマンド2発になるけどそこから鍵認証設定する。
参考URL
ssh-keygenをパスフレーズの確認なしで作成する
https://qiita.com/genreh/items/acfa49f569f665c8f024
SSH keyを4096bitで作成する
https://qiita.com/hietahappousai/items/a7fae4838e510136fc08
Wokashi: サーバに新たなSSH公開鍵を追加する
http://mironal-memo.blogspot.com/2012/07/ssh.html
多段sshを行うときに、ローカルの秘密鍵を参照し続ける
https://qiita.com/himo/items/5eb833ad757bd8b3e6c3
ProxyCommandによるsshの多段接続について -- ぺけみさお
https://www.xmisao.com/2013/10/08/ssh-proxy-command.html
Fix unix_listener too long for Unix domain socket
https://gist.github.com/andyvanee/bcf95b1044b80e72b4a42933549a079b
OpenSSHのセッションを束ねるControlMasterの使いにくい部分はControlPersistで解決できる - Dマイナー志向
http://d.hatena.ne.jp/tmatsuu/20120707/1341677472
SSH 多段接続で三段先のサーバに接続する - らくがきちょう
http://sig9.hatenablog.com/entry/2016/07/05/230000