実行に時間がかかり、継続的な接続を必要とするいくつかのコマンドを実行するためのスクリプトを作成しようとしています。
autossh user@server
wait $! #or wait ${!}
commandA
commandB
それはうまくいきません(autossh
バックグラウンドに入るので仮定します)。 GUIがポップアップし、パスワードを要求し、次のいくつかのコマンドを実行します。
次のコマンドを実行する前に接続が確立されるまでどのように待機できますか?
修正する:
autossh -f => "...sshを実行する前にautosshがバックグラウンドに落ちるようにします..."
したがって、-f wait を使用しても何もしません。これを使用しないと、決して終わらないsshを待ちます。
ベストアンサー1
私が正しく理解した場合、あなたの問題は、残りのスクリプトを続行する前に認証が成功するのを待つことです。
この問題は私が解決します。公開鍵認証とssh-agent。
一度設定され、ssh-agent が実行されると、ssh はパスワードを要求せず、スクリプトは毎回正しく認証されます。 (これは接続が機能していることを確認するのとまったく同じではありませんが、目的には十分です。)
私は2つの異なる解決策を考えました。
- whileループでtcptracerouteを使用して、ポート転送が正しく機能していることを確認します(ポート転送を使用しているか、この目的のためにポート転送を作成できるとします)。成功した応答が得られるまでループから抜けないでください。
- リモート側のスクリプトに長期実行コマンドを配置し、screenまたはnohupで実行します。私が過去に使用した1つの方法は、スクリプトを生成し、それをリモート側にコピーして、nohupを使用して実行することです。