この説明のために、機械私のラップトップであり、リモートサーバーに接続するために使用します。電話します。サーバー名。
プロセスは次のように説明できます。
- サーバーに接続します。サーバー名
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
Enterを押します。サーバー名。
上記の作業を手動で実行するのは面倒で時間がかかります。だから上記のプロセスを自動化したいのですが、3つの難しさがあります。
- つながるときサーバー名
exit
、シェルでコマンドを実行すると正常にログアウトし、次に戻ります。機械。ただし、スクリプトファイル内exit
で実行するとスクリプトが終了します。.sh
- パスワードを自動的に入力するにはどうすればよいですか?サーバー名ステップ?パスワードを手動で入力したくないスクリプトを入力するようにします。つまり、パスワードが邪魔されないように、何らかの方法でスクリプトにパスワードをハードコードしたいと思います。
- 「サーバーがSSH接続の準備をするのを待っています」ステップ:これを自動化する方法は?つまり、
ping
スクリプトping
に要求があることを認識したいのです。サーバー名を選択して接続しますssh
。しかし、ping
答えがping
保証されていないので、ここで使用するのはおそらく良い考えではありません。サーバー名接続を聞く準備ができました(上記のプロセスの私の経験によれば、最初のssh
応答を受けてから数秒かかります)。ping
したがって、より良いアプローチは、アクセスが許可されるまでスクリプトがループで試行し続けるようssh
にすることです。
答え1
コンピュータからサーバー.ssh/authorized_key
のファイルに公開鍵データをインポートできる場合は、ssh
パスワードを入力せずにサーバーごとに1回の呼び出しでコンパイルを実行できます。
ssh someone@$SERVER 'cd /some/path/; make clean > /dev/null; make > /dev/null;'
SERVER
これをシェルスクリプトのループに入れて、毎回シェル変数の値を変更できます。電話するたびにパスワードを入力しても問題ない場合は、ssh
サーバーの公開鍵データも必要ありません。