我试图创建一个相当基本的脚本来运行服务器列表并检查 SSH 端口是否使用nc
. 我尝试了几种不同的方法,但似乎无法让它发挥作用。我绝对不擅长任何类型的脚本。
这是脚本。我只是希望它nc
在OPEN
.
while read SERVER
do
OPEN=$(nc -z -v -w5 $SERVER 22)
echo $SERVER
if [[ $OPEN = *"suc"* ]];
then
echo "Found SSH open on $SERVER"
else
echo "No open ports on $SERVER!"
fi
done < server.txt
服务器列表位于server.txt
脚本末尾引用的文件中。
这是我得到的回应。我不
nc: connect to 10.10.51.55 port 22 (tcp) failed: No route to host
10.10.51.55
No open ports on test1!
Connection to 10.10.51.65 22 port [tcp/ssh] succeeded!
10.10.50.65
No open ports in test2!
无论如何,它都会给我“$SERVER 上没有开放端口”。
我感谢您的任何指导。
注释,太长了,无法评论。
server.txt
最好是命名server-list
或servers.txt
如果你愿意。使用小写变量名,如、避免等,无论如何
SERVER
都可以更好地命名server_ip
,因为不清楚您使用的是主机名还是 IP。双引号所有非整数变量,如
"$server_ip"
.使用直接
if
语句而不是变量$OPEN
来重定向到黑洞 (/dev/null
)。根据以上重写:
最简单的解决方案似乎是:
问题是
nc
在输出诊断消息时写入标准错误,而命令替换仅捕获标准输出。您还应该使用
==
in[[ ... ]]
。应该引用变量扩展,理想情况下,您将printf
用于输出变量数据。这意味着您的代码可能看起来像
或者
或者,您可以只使用以下的退出状态
nc
: