SSHサーバにログインおよびログアウトするスクリプトの作成

SSHサーバにログインおよびログアウトするスクリプトの作成

この説明のために、機械これは私のラップトップで、リモートサーバーに接続するために使用します。サーバーの名前

手順は次のように説明できます。

  1. サーバーに接続しますサーバーの名前からssh機械
  2. 次にパスワードを入力しますサーバーの名前
  3. 私は何かをコンパイルしますサーバーの名前
  4. ログアウトしますサーバーの名前(使用exit
  5. その後再起動しますサーバーの名前から機械
  6. ping サーバーの名前そして、応答が返ってくるまで待ちます(pingの出力はコンソールに表示されます)
  7. sshサーバーの名前また
  8. いくつかのチェックを実行します
  9. 最後に、私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 つの難点があります。

  1. 接続中サーバーの名前シェルからコマンドを発行するとexit、正常にログアウトして機械ただし、exitスクリプト.shファイル内から発行するとスクリプトが終了します...
  2. パスワードを自動化するにはどうすればいいですか?サーバーの名前フェーズですか? パスワードを手動で入力するのではなく、スクリプトに入力させたいと思っています。言い換えると、パスワードを何らかの方法でスクリプトにハードコードして、煩わしくないようにしたいのです。
  3. 「サーバがSSH接続の準備ができるまで待機」フェーズ: これを自動化するにはどうすればよいでしょうか? つまり、ping応答が得られるまで を して、その後Ctrl+Cで中断するのではなく、スクリプトでping、サーバからの応答があることを認識するようにしたいのです。サーバーの名前、その後 に接続しますssh。ただし、への応答が保証するものではないpingため、ここで を使用することはあまり良い考えではないかもしれません。pingサーバーの名前接続をリッスンする準備ができていますssh(上記のプロセスに関する私の経験から、 への最初の応答がping取得されてからさらに数秒かかります)。したがって、アクセスが許可されるまでスクリプトがsshループで試行し続ける方がよいアプローチである可能性があります (何らかのビジー待機メカニズム、または接続を試行するために数秒ごとにスリープおよびウェイクアップするループ)。

答え1

自分のマシンからサーバーのファイルに公開鍵データを取得できる場合は、パスワードを入力せずに、サーバーごとに.ssh/authorized_key1 回の呼び出しでコンパイルを実行できます。ssh

ssh someone@$SERVER 'cd /some/path/; make clean > /dev/null; make > /dev/null;'

SERVERこれをシェル スクリプトのループに入れて、毎回シェル変数の値を変更することもできます。ssh呼び出しごとにパスワードを入力することに抵抗がなければ、サーバー上の公開鍵データも必要ありません。

関連情報