2014-10-19 50 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。