ssh_configの変数拡張

ssh_configの変数拡張

リモート管理されたデバイスがあります。この説明したがって、私のサーバーから接続するには、次のように入力します。

ssh localhost -p 2870

私は多くのホストを管理しているので、次のように入力できるようにこれを単純化したいと思います。

ssh 2870

私はbashエイリアスを使用したくなかったので(それ以降はSCPとAnsibleを使用できません)、次のことを試しました~/.ssh/config

Host 28??
       HostName localhost
       Port %h

何らかの理由で%hがポート行で拡張されていないため失敗します(ホスト名やその他の名前で拡張されます)。だからこれを試しました:

Host 28??
       ProxyCommand ssh -v localhost -p %h

ここで %h はうまく拡張され、公開鍵を介して正常にサーバーにログインしていることがわかりますが、プロンプトは表示されません。

SSH設定でこの「エイリアシング」を実行する方法についてのアイデアはありますか?

答え1

Portディレクティブで%h拡張が機能しないようです。 .ssh/configに多くのエントリを入力しても構わない場合は、動的に生成することは難しくありません(特にリストがあるか連続している場合)。

$(for port in `seq 2000 2900`
 do
   echo Host $port
   echo "  Hostname localhost"
   echo "  Port ${port}"
   echo ""
 done) >> ~/.ssh/config

SSHのソースコードを見ることができ、ポートが拡張されていないことを確認できます。

conf.cを読む:https://github.com/openssh/openssh-portable/blob/dc664d1bd0fc91b24406a3e9575b81c285b8342b/readconf.c

パーセント_expand関数は、ホストオプションとexecオプションに対して呼び出されます。これは%hをホスト名に変換する関数のようです。同じ関数がssh.cから呼び出されます。興味深いことに、ProxyCommandはこれらの変数の拡張を後で延期するようです。 Portディレクティブはこれを呼び出しません。

https://github.com/openssh/openssh-portable/blob/ed877ef653847d056bb433975d731b7a1132a979/misc.c

関連情報