ポート転送が失敗したときにSSHを失敗させることはできますか?


39

-R 3690:localhost:3690リモートホストのポートにバインディングが既に存在する場合に、リモートポート転送を実行すると、次の警告が表示されます。

Warning: remote port forwarding failed for listen port 3690

警告を発するだけでなく、sshが失敗する(ゼロ以外のリターンコードで終了する)方法はありますか?


実際に端末チャネルも作成する必要がありますか、それとも転送のみですか?
イグナシオバスケス-エイブラムス

1
@ IgnacioVazquez-Abrams:ただの転送。
マットジョイナー

回答:


63

走る

ssh -o "ExitOnForwardFailure yes" ...

または置く

ExitOnForwardFailure yes

~/.ssh/config。詳細man ssh_configを参照してください。


残念ながら、OpenSSH 4があります。この機能が追加された時期を教えてください。
マットジョイナー

2
いいえ、わかりません。バージョン5の機能である可能性があります。しかし、バージョン4は今から何年も前のものでなければならず、常にセキュリティ修正が行われています。自分でサーバーをアップグレードできない場合は、そのバージョンを使用し続けることが安全であると考えているかどうかをサーバー管理者に尋ねることができます。
アンドリューシュルマン

明示的に指定しないとbind_address、sshが失敗しない可能性があることに注意してください。たとえば、別のユーザーがすでにipv6 localhostでリッスンしている[::1]:3690場合、sshはipv4のみをバインド127.0.0.1:3690し、文句を言いません。ただし、svnクライアントはおそらく(攻撃者の)ipv6ソケットを好むでしょう。安全良く使用されるように-R [::1]:3690:localhost:3690 -R 127.0.0.1:3690:localhost:3690
rudimeier

3
ssh -o ExitOnForwardFailure = yesを使用して、空白や引用符の必要性を回避することもできます。
フリースペース

1

ターゲットホストでbashスクリプトを使用して、転送が正しく開かれたことを確認します。SSH接続はこれを実行し、ポート転送に問題がある場合は終了します。例えば

クライアント側スクリプト:(これはポート転送設定に.ssh / configを使用します)

#!/bin/bash    

while true; do
    echo -n starting at : "
    date
    ssh user@server bin/sshloop.sh
    echo "got back, sleeping 17 "
    sleep 17
done 

サーバー側スクリプト(bin / sshloop.sh)

#!/bin/bash

while true; do 
  echo $(date)" : SSH Reverse 1090:80, 1232:22 From Server to Client"
  sleep 17
  if ! netstat -an | grep -q ":::1090 " ; then
     echo "1090 forward missing, bailing out"
     exit
  fi
done

-dmSを使用して、画面の下でクライアント側スクリプトを実行することもできます


2
回避しようとしているのは、ポートフォワードが既に存在し、警告が表示される場合です。このスクリプトは、ポートへの既存のバインディングを失敗ではなく成功として扱うと思います。
マットジョイナー

1
これは本当です。私の問題は、タイムアウトする前にポートを数分間開いたままにする同じスクリプトに関するものでした。このスクリプトは数回終了してから再実行され、その後ポートが再び開きます。ポートの所有者を確実に知る必要がある場合は、sudoを指定してnetstat -anpを実行し、それをgreppingしてみてください。
アンティライツォラサークルコンサルティング

@AnttiRytsöläCirclesConsult:プロセスIDを確認する必要がある場合があることに注意してください。たとえば、プロセス名がまだそのポートを転送しているSSHクライアントがどれであるかがまだ分からないため、「ssh」で一致します。
Piskvor
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.