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を押して停止し、sshEnterを押します。サーバー名

上記の作業を手動で実行するのは面倒で時間がかかります。だから上記のプロセスを自動化したいのですが、3つの難しさがあります。

  1. つながるときサーバー名exit、シェルでコマンドを実行すると正常にログアウトし、次に戻ります。機械。ただし、スクリプトファイル内 exitで実行するとスクリプトが終了します。.sh
  2. パスワードを自動的に入力するにはどうすればよいですか?サーバー名ステップ?パスワードを手動で入力したくないスクリプトを入力するようにします。つまり、パスワードが邪魔されないように、何らかの方法でスクリプトにパスワードをハードコードしたいと思います。
  3. 「サーバーが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サーバーの公開鍵データも必要ありません。

関連情報