web-dev-qa-db-ja.com

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

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

Warning: remote port forwarding failed for listen port 3690

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

40
Matt Joiner

走る

ssh -o ExitOnForwardFailure=yes ...

または置く

ExitOnForwardFailure yes

~/.ssh/configに挿入します。詳細については、man ssh_configをご覧ください。

67
Andrew Schulman

ターゲットホストで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を使用して画面下でクライアント側のスクリプトを実行する

1
Antti Rytsölä