在伺服器列表上執行 ping 命令並輸出到文件
我
servers.txt
在另一台伺服器上有一個文件,其中包含伺服器列表:server1.mydomain.com server2.mydomain.com server3.mydomain.com
我想先下載這個 txt 文件,ping 這些伺服器並將 ping 結果輸出到一個文件中。我想每隔 x 秒在一個無限循環上執行此操作。
我有一個 VPS 登錄名,到目前為止,我已經想出使用一個名為
putty.exe
.我應該如何處理這個?我想我應該編寫一個腳本並將伺服器設置為每 x 秒執行一次或使用 while 循環。
好的,我相信我現在明白你的問題了。
在主機 1 上
讓我們假設您必須通過
host1
您連接的主機,在此主機上安裝或(從包管理器,它們應該在那裡)。我建議,因為它對初學者來說更容易一些。ssh``putty``screen``tmux``screen
此外,您需要能夠登錄
host2
from,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 上
~/.ssh
在 host2 中創建並移動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
onhost2
。這個假設是必要的,因為我們將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
顯然沒有任何變化。您現在處於
shell
通過 a 訪問的 asocket
中,如果您從它然後關閉/var/run
,此 shell 將不會關閉一次(實際上,如果您只是關閉作業系統會解決問題並且不會關閉 shell,但讓我們做一個適合教育原因)。在分離之前是時候執行了: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 screen也是如此。這兩篇文章是這兩個程序的極好資訊來源。