2014-10-19 65 views
-2
#!/bin/bash 
USER=root 
KEY=~/.ssh/id_rsa.pub 
for HOST in server1 server2 
do 
    ssh -l $USER -i $KEY $HOST grep -I "Invalid user" /var/log/secure | awk '{ print $10 }' 
done 

我明白grep這一行返回「無效用戶」嘗試的IP地址,但任何人都可以澄清for HOST ..行嗎?我不明白這個腳本究竟做了什麼。 另外當我把server1=workshop2(我的主機名)收到錯誤ssh: cannot resolve hostname workshop2for循環如何在Bash腳本中工作?

回答

0

這是一個for循環,將HOST依次設置爲服務器名稱。這些需要是你可以使用的名字,所以workshop2不起作用。嘗試找到可以通過命令行通過ssh訪問的服務器的地址。您也可以在for HOST in之後列出服務器。用實際名稱替換server1和server2。

對於列表中的每臺服務器,腳本登錄到服務器並運行grep命令,查找/var/log/secure中的「無效用戶」。對於它找到的每一行,它使用awk打印出行中的第10個項目。

1

這個想法似乎是要找出哪個IP地址試圖擺脫你的服務器的方式,你已經想通了。

for是一個shell迭代構造,爲名稱列表中的每個服務器運行迭代。 「server1 server2」就是你的例子中的那個列表。

您遇到問題的原因是您使用您的主機名爲serverssh已經知道那一點信息,謝謝。 ssh想要的是目標的主機名該腳本試圖監視的機器。 ssh將創建與服務器的遠程會話,運行grep ...命令序列,吐出IP地址並關閉會話 - 這是一個用於迭代的地方。

錯誤消息是因爲您沒有辦法將遠程shell會話運行到您自己的機器中。你已經在那裏!

請查看man ssh瞭解更多詳情。我也會建議man bash,但是你會發現在線使用更簡單的手冊。

HTH。