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