for循环如何在Bash脚本中工作?

时间:2014-10-19 05:54:49

标签: bash

#!/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 workshop2

2 个答案:

答案 0 :(得分:1)

这个想法似乎是找出哪些IP地址正试图摆弄你的服务器,正如你已经想到的那样。

for是一个shell迭代构造,为名称列表中的每个服务器运行迭代。 " server1 server2"是你的例子中的那个列表。

您遇到问题的原因是您使用 主机名serverssh已经知道了一点信息,谢谢。 ssh想要的是此脚本试图监视的目标计算机的主机名。 ssh将与服务器创建一个远程会话,运行grep ...命令序列,吐出IP地址,然后关闭该会话 - 这是迭代的一个会话。

出现错误消息是因为您无法在自己的计算机上运行远程shell会话。你已经在那里了!

查看man ssh了解更多细节。我也建议man bash,但你会发现更容易在线消费的手册。

HTH。

答案 1 :(得分:0)

这是一个for循环,它将HOST按顺序设置为服务器名称。这些必须是您可以使用的名称,因此workshop2无效。尝试在命令行上通过ssh找到该服务器的地址。您也可以在for HOST in之后列出服务器。将server1和server2替换为实际名称。

对于列表中的每个服务器,脚本都会登录到服务器并运行grep命令,在/var/log/secure中查找“无效用户”。对于它找到的每一行,它使用awk打印出行中的第10个项目。