2016-04-22 6 views
3

私は以下のように、異なるサーバー上の1000以上のアカウントにSSHする予定の小さなスクリプトを用意しています。bashで終了コードを迂回します

​​

問題は、sshがアクセス許可を拒否する瞬間、スクリプトが終了します。理解できるように、SSHパーミッション拒否は終了コードのように機能し、スクリプトを終了します。拒否されたアクセス許可をログに記録し、そのメリーな方法でSSHを継続する必要があります。

アドバイスはありますか?

答えて

7

通常、スクリプトでset -eが高く設定されていない限り、bashは最初のエラーで終了しません。 forループの前に入れてみてください。

set +e 

p.s.ループの最後にdoneがありません。私はちょうどカットアンドペーストのエラーだと思う。

3

は、以下のことを試してみてください。また、あなたは論理演算子OR使用することができます

if ! sshpass -p $PASS ssh -o StrictHostKeyChecking=no [email protected]$SERVER "ls passwd.cdb && exit"; then 
    echo >&2 "WARNING: access denied for [email protected]$SERVER" 
fi 

:ちょうどここに更新する

sshpass -p $PASS ssh -o StrictHostKeyChecking=no [email protected]$SERVER "ls passwd.cdb && exit" || 
    echo >&2 "WARNING: access denied for [email protected]$SERVER" 
1

を、私は忙しい:)となって、それはしばらくしています知っています。スクリプトの一番上の難読化されたコードにset -eが設定されていました。コードを難読化した人にそれを削除させてもらいました。また、アクセス拒否メッセージをログに記録する良いアイデアのためのslava semushinに感謝します。

関連する問題