カスタムポートを持つサーバーループの場合( "user1@server1 -p 12345" "user2@server2 -p 54321" ...; do)

カスタムポートを持つサーバーループの場合(

SSHを介して一連のサーバーでコマンドを実行しようとしています。最近、インターネットスキャナを避けるためにSSHポートを変更しましたが、これはスクリプトを壊しました。 forループの各user@serverエントリに対して異なるポートを指定する「簡単な方法」を知っている人はいますか?

for i in '[email protected] -p 12345' '[email protected] -p 54321'
 do printf "\e[%sm%s\e[00m\n" 32 $i
 ssh $i crontab -l
done

2行目は、読みやすくするために出力する前にサーバー名を印刷します。

それが私に与えるのは幸せではありませんが、ssh: Could not resolve hostname server1.domain1.com -p 12345: Name or service not known

以前は、すべてのポートがデフォルト値22のときに機能し、指定する必要はありませんでした。

ベストアンサー1

バージョン7.7以降、OpenSSH ssh(およびそのscp同僚sftp)はURI形式のターゲットを受け入れます。必要に応じて、ポート番号をURIの一部として指定できます。たとえば、「ssh://someuser@somehost:42」はポート 42 に接続されます。シェルに関する限り、URIの利点は、焦点を合わせる単一の文字列であることです。だからあなたはこれを行うことができます:

for i in 'ssh://[email protected]:12345' 'ssh://[email protected]:54321'
 do printf ...
 ssh "$i" ...
done

SSH URIの一般的な形式は「ssh://user@host:port」です。 「user」と「port」の両方の部分はオプションであり、値を指定する必要がない場合は、「@」または「:」の句読点で省略できます。

おすすめ記事