背景
ssh-keyscan コマンドは ~/.ssh/config の設定を無視し、直接ターゲットホストへ接続を試みます。また、HTTP/HTTPS プロキシを利用するオプションもありません。そのため、プロキシ環境下で ssh-keyscan を利用するには工夫が必要です。
解決方法
この問題は socat を利用することで解決できます。socat はデータ転送を柔軟に制御できるツールで、今回のようなプロキシ経由の TCP 通信を簡単に実現できます。
| ホスト | ポート | |
|---|---|---|
| プロキシサーバー | proxy | 3128 |
| ターゲット | ssh.github.com | 443 |
表のような条件の場合の実行例を次に示します。
1. socat をバックグラウンドで実行する
socat TCP-LISTEN:1234,fork PROXY:proxy:ssh.github.com:443,proxyport=3128 &
-
TCP-LISTEN:1234,fork- ローカルのポート
1234でリッスンし、接続ごとに新しいプロセスを生成(fork)
- ローカルのポート
-
PROXY:proxy:ssh.github.com:443,proxyport=3128-
proxy:3128を介してssh.github.com:443に接続
-
2. ssh-keyscan を実行する
起動した socat 経由で ssh-keyscan を実行します。
ssh-keyscan -p 1234 localhost
取得された結果のホスト名は localhost になるため適宜読み替えてください。
3. socat プロセスを終了する
fg %1 # バックグラウンドジョブをフォアグラウンドに戻す
Ctrl+C # 停止