私は以下のように、異なるサーバー上の1000以上のアカウントにSSHする予定の小さなスクリプトを用意しています。bashで終了コードを迂回します
問題は、sshがアクセス許可を拒否する瞬間、スクリプトが終了します。理解できるように、SSHパーミッション拒否は終了コードのように機能し、スクリプトを終了します。拒否されたアクセス許可をログに記録し、そのメリーな方法でSSHを継続する必要があります。
アドバイスはありますか?
私は以下のように、異なるサーバー上の1000以上のアカウントにSSHする予定の小さなスクリプトを用意しています。bashで終了コードを迂回します
問題は、sshがアクセス許可を拒否する瞬間、スクリプトが終了します。理解できるように、SSHパーミッション拒否は終了コードのように機能し、スクリプトを終了します。拒否されたアクセス許可をログに記録し、そのメリーな方法でSSHを継続する必要があります。
アドバイスはありますか?
通常、スクリプトでset -e
が高く設定されていない限り、bashは最初のエラーで終了しません。 for
ループの前に入れてみてください。
set +e
p.s.ループの最後にdone
がありません。私はちょうどカットアンドペーストのエラーだと思う。
は、以下のことを試してみてください。また、あなたは論理演算子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"
を、私は忙しい:)となって、それはしばらくしています知っています。スクリプトの一番上の難読化されたコードにset -eが設定されていました。コードを難読化した人にそれを削除させてもらいました。また、アクセス拒否メッセージをログに記録する良いアイデアのためのslava semushinに感謝します。