servers.txt
サーバーのリストを含むファイルが別のサーバーにあります。
server1.mydomain.com
server2.mydomain.com
server3.mydomain.com
まず、このtxtファイルをダウンロードしてそのサーバーにpingを実行してから、ping結果をファイルに出力したいと思います。 x秒ごとに無限ループでこれを行いたいです。
私はVPSログインを持っており、これまでVPSに接続するために呼び出されたプログラムを使用して見つけましたputty.exe
。
この問題にどのように対処する必要がありますか?スクリプトを作成し、サーバーをx秒ごとに実行するように設定するか、whileループを使用する必要があると思います。
答え1
さて、今あなたの質問を理解したと思います。
ホスト1で
host1
インストールするホストを介してすでに接続されているか(パッケージマネージャでそのホストが必要です)とします。初心者には少し簡単なのでおすすめです。ssh
putty
screen
tmux
screen
また、ログインが必要なので、host2
パスワードなしでログインできるアカウントをhost1
設定する必要があります。ssh key
これを行うには、以下を実行する必要があります。
ssh-keygen -f ~/.ssh/host1tohost2
パスワードの入力を求められます。スクリプトの実行を自動化するには(パスワードを手動で入力する必要なしに)、空のパスワードに設定する必要があります。 Host1が安全であることを確認してください!このキーのおかげで、コントロールを持っている人は誰でもhost1
コントロールを得ることができますhost2
(ユーザー権限が許可する範囲内で)。
このコマンドは次のファイルを生成します。
~/.ssh/host1tohost2
~/.ssh/host1tohost2.pub
~/.ssh/host1tohost2.pub
次の場所にコピーする必要がありますhost2
。
scp ~/.ssh/host1tohost2.pub me@host2:~
ホスト2で
Host2で作成し~/.ssh
てそこに移動したら、そのディレクトリに次のファイルを作成しますhost1tohost2.pub
。authorized_keys
mkdir -f ~/.ssh
mv ~/host1tohost2.pub ~/.ssh
cd ~/.ssh
cat host1tohost2.pub >> authorized_keys
これにより、対話型パスワードプロンプトなしでhost1
ログインできます。host2
次に、
ファイルservers.txt
がにあるとしましょう。この仮定はスクリプトで使用するので必要です。/home/me/myservers/servers.txt
host2
path
host1
ホスト1に戻る
必要な無限ループスクリプトは次のとおりです。
#!/bin/sh
X_SECONDS=6
LOGFILE=~/mypings.log
while ((1)); do
# >$LOGFILE # clear log file (see comments)
ssh -i ~/.ssh/host1tohost2 me@host2 'cat /home/me/myservers/servers.txt' |
while read x; do
echo "ping to $x"
ping -c1 $x >> $LOGFILE
done
sleep $X_SECONDS
done
スクリプトがというファイルに保存されているとしますpingservers.sh
。ただし、一度閉じると停止するため、まだ実行しないでくださいputty
。さて、screen
現場に行きましょう(設置しましたね?)。ランニング:
screen
明らかに何も変わらなかった。これでin経由でアクセスした環境にありshell
、その後そのシェルで閉じるとシェルは一度も閉じません。 (実際にOSだけを終了すると問題が解決し、どうせシェルも閉じないようになりますが、教育的な理由で適切に行ってください)。分離する前に、以下を実行する必要があります。socket
/var/run
detach
putty
putty
detach
./pingservers.sh
永久に実行され、echo
ログファイルへの書き込み中に複数のメッセージを保持します。
取り外すには、screen
キーを入力する必要がありますCtrl+A D
(をCtrl押してからA離してCtrlを押しますD)。もう一度shell
ログインしたので、閉じてコーヒーを飲むputty
ことができます。putty
再度ログインすると、host1
ファイルは~/mypings.log
より多くのpingで更新されます(screen
再実行する必要はありません)。リアルタイムで更新されたファイルを確認するには、次のものを使用できます。
tail -f ~/mypings.log
これArch Linux Wikiには、ssh-keygenとSSHキーに関するより有用な情報があります。、同じGNU画面。どちらの記事も両方のプログラムの優れた情報源です。
答え2
for i in `cat servers.txt` ; do ping -c1 $i 2>&1 | tee >> ping-output.txt; done
これはファイル内のすべての行をpingし(iを変数として値を格納し、$ iを使用して変数を参照)、すべての出力を[出力]ファイルにリダイレクトします。パート2>&1は、teeコマンドを使用してstdout(pingの結果)とstderr(ホストエラーがなかったためpingがありません)をファイルにキャプチャーします。