#!/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
。
答案 0 :(得分:1)
这个想法似乎是找出哪些IP地址正试图摆弄你的服务器,正如你已经想到的那样。
for
是一个shell迭代构造,为名称列表中的每个服务器运行迭代。 " server1 server2"是你的例子中的那个列表。
您遇到问题的原因是您使用 主机名server
。 ssh
已经知道了一点信息,谢谢。 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个项目。