SSHを介していくつかのファイルをコピーするためにリモートホストに接続するスクリプトがあります。ポート873でリッスンするrsyncデーモンに接続する必要があります。これを達成するために、次のSSH構成があります。
Host blah
LocalForward 10873 127.0.0.1:873
Hostname 10.2.4.1
残念ながら、このスクリプトのタイミングにより、SSHセッションを確立しようとすると、別の同様のスクリプトが他のホストのポートを開くことがあります。
別のSSHセッションが開いている間に接続すると、明確なメッセージが表示されます。住所はすでに使用中です。。
me@local:~$ ssh blah
bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 10873
Could not request local forwarding.
Linux remote 2.6.26-2-amd64 #1 SMP Tue Jan 25 05:59:43 UTC 2011 x86_64
motd...
remote:~$
私が望むのは、終了コードを使用してSSHクライアントをすぐに終了させることです。これにより、誤ったホストに転送されたポートに対してコマンドを実行するのではなく、失敗を報告するロジックをスクリプトに配置できます。
答え1
SSH設定オプションがあります(からssh_config(5)
):
転送に失敗した場合
すべての要求に対して動的、トンネリング、ローカル、およびリモートポート転送を設定できない場合は、ssh(1)が接続を終了するかどうかを指定します。引数は「はい」または「いいえ」でなければなりません。デフォルトは「いいえ」です。
したがって、SSH 構成に以下を追加できます。
ExitOnForwardFailure yes
またはコマンドラインから:
$ ssh -o ExitOnForwardFailure=yes blah