私の自宅のコンピューターは、OS X 10.8.5 を実行している Mac で、通常はインターネット経由で SSH 接続を受け入れますが (ポート転送済み)、現在はスリープ状態です。外出中にさまざまな理由でコンピューターが起動することがあります。コンピューターに SSH コマンドを送信したいのですが、コンピューターが起動するまで待って試し続けることはできません。
ホスト コンピュータが応答するまで SSH 接続、パスワード認証、およびコマンド入力を遅らせる、AppleScript を使わない簡単な方法はありますか? 自宅以外では Mac を使用していますが、Unix ベースの OS でこれを行う方法を知りたいです。通常、接続を試行してから 1 分ほどでタイムアウトします。
ほとんどのターミナル エミュレータでは、ブロッキング プロセスの実行中にコマンドを入力することができ、それらのプロセスが終了するとコマンドが実行されることを知っています。たとえば、がまだ実行されている直後に と入力するとgit push foo
、コミットが完了すると git がプッシュします。ターミナル エミュレータを介して ssh でこれと同じことを実行するには、何かコツがあるのではないかと思いました。git commit -a -m "foo"
git commit -a -m "foo"
答え1
ping でマシンが起動しているかどうか確認し、1 つまたは複数の ssh コマンドを実行します。ホストで証明書ベースの認証を設定する必要があることに注意してください。これは GNU/Linux の BASH に基づく小さなスクリプトですが、Mac OS X で使用されているものに変換できると思います。
#/bin/bash
hostup=0
while [ $hostup -ne 1 ]; do
ping -c 4 <hostname or IP>
if [ $? -eq 0 ]; then
ssh username@hostname <command to execute>
hostup=1;
done
SSH 行ごとにコマンドは 1 つだけであり、パラメータを使用する場合はコマンドを引用符で囲む必要があります。常に同じコマンドを実行する場合は、自宅のマシンにスクリプトを用意しておくとよいでしょう。