
この説明のために、機械これは私のラップトップで、リモートサーバーに接続するために使用します。サーバーの名前。
手順は次のように説明できます。
- サーバーに接続しますサーバーの名前から
ssh
機械 - 次にパスワードを入力しますサーバーの名前
- 私は何かをコンパイルしますサーバーの名前
- ログアウトしますサーバーの名前(使用
exit
) - その後再起動しますサーバーの名前から機械
- 私
ping
サーバーの名前そして、応答が返ってくるまで待ちます(ping
の出力はコンソールに表示されます) - 私
ssh
はサーバーの名前また - いくつかのチェックを実行します
- 最後に、私
exit
はサーバーの名前戻るために機械
上記のレシピを実現するために、私は手動で次のコマンドを実行します機械:
<machine>$ ssh server_name
insert password for server_name:
<server_name>$ cd /some/path/
<server_name>$ make clean > /dev/null
<server_name>$ make > /dev/null
<server_name>$ exit
<machine>$ ./my_reboot_script server_name
<machine>$ ping server_name
PING 10.23.22.7 with 56(84) bytes of data.
ping output... (not very interesting)...
ping output... (not very interesting)...
ping output... (not very interesting)...
ping output... (not very interesting)...
^C
<machine>$ ssh server_name
insert password for server_name:
<server_name>$ ./run_some_checks
<server_name>$ exit
<machine>$ echo "Done!"
上記についていくつか注意点があります。
-my_reboot_script
コールドリブートを可能にするプログラムですサーバーの名前自分の席の快適さから。
- コールドリブート後サーバーの名前、それが回復するのを待つ必要があるので、 を使って再接続しますssh
。そのためには を使用しますping
。これは単に、サーバーの名前再び接続を受け入れる準備ができました。コンソールに出力がようやく表示されたらping
、Ctrl+Cで中断しssh
、サーバーの名前。
上記の作業を手動で行うのは面倒で時間がかかります。そこで、上記のプロセスを自動化したいのですが、3 つの難点があります。
- 接続中サーバーの名前シェルからコマンドを発行すると
exit
、正常にログアウトして機械ただし、exit
スクリプト.sh
ファイル内から発行するとスクリプトが終了します... - パスワードを自動化するにはどうすればいいですか?サーバーの名前フェーズですか? パスワードを手動で入力するのではなく、スクリプトに入力させたいと思っています。言い換えると、パスワードを何らかの方法でスクリプトにハードコードして、煩わしくないようにしたいのです。
- 「サーバがSSH接続の準備ができるまで待機」フェーズ: これを自動化するにはどうすればよいでしょうか? つまり、
ping
応答が得られるまで を して、その後Ctrl+Cで中断するのではなく、スクリプトでping
、サーバからの応答があることを認識するようにしたいのです。サーバーの名前、その後 に接続しますssh
。ただし、への応答が保証するものではないping
ため、ここで を使用することはあまり良い考えではないかもしれません。ping
サーバーの名前接続をリッスンする準備ができていますssh
(上記のプロセスに関する私の経験から、 への最初の応答がping
取得されてからさらに数秒かかります)。したがって、アクセスが許可されるまでスクリプトがssh
ループで試行し続ける方がよいアプローチである可能性があります (何らかのビジー待機メカニズム、または接続を試行するために数秒ごとにスリープおよびウェイクアップするループ)。
答え1
自分のマシンからサーバーのファイルに公開鍵データを取得できる場合は、パスワードを入力せずに、サーバーごとに.ssh/authorized_key
1 回の呼び出しでコンパイルを実行できます。ssh
ssh someone@$SERVER 'cd /some/path/; make clean > /dev/null; make > /dev/null;'
SERVER
これをシェル スクリプトのループに入れて、毎回シェル変数の値を変更することもできます。ssh
呼び出しごとにパスワードを入力することに抵抗がなければ、サーバー上の公開鍵データも必要ありません。