chef-soloでsshの通信ポート番号を変更する

稼働中システムのバージョンアップ作業が進行中。本システムはちゃんと試験環境があるんですが、運用しているうちに試験環境が試験環境じゃなくなって潰したらあかん環境になってしまっています。まぁよくあること。
なので、Dockerで環境をつくって、そこに対してchefで各種レシピを適用して試験することに。

でですね、Dockerで環境を作成してsshdを立ち上げて、自環境からsshトンネルを利用してsshでDockerの環境に通信できるところまで確認。
Dockerコンテナはこんな感じで起動してsshdがlistenしているtcp/22をホストのtcp/6005へトンネル。

# docker run --privileged -d -p 6005:22 -p 6001:7080 -p 6002:7443 hoge/fuga /sbin/init

さらにコンテナが動作しているホストの6005をsshトンネルでlocalhost:3001へトンネル。

$ ssh -L3001:localhost:6005 host_name

これでsshでコンテナへログイン可能。

$ ssh -p 3001 localhost
X11 forwarding request failed on channel 0
Last login: Tue May 29 06:17:21 2018 from gateway
[hoge@9249c879f0d3 ~]$ 

目的はchef-soloでの環境構築ですが、chef-soloはsshで各種コマンドを送るため、localhosttcp/3001に対してsshを喋らせないといけません。どうやるんだろうと調べること数分。knifeのドキュメントにちゃんと書いてありました。ここを参照。

$HOME/chef/.chef/knife.rb中に以下を追加(自環境では$HOME/chef以下にchef環境があるため。環境によって場所が違うかも)。

knife[:ssh_port] = 3001

いいんだけど、コマンドラインで指定できれば嬉しいんだけどなぁ。