【发布时间】:2017-04-25 00:09:26
【问题描述】:
我正在运行一个 bash 脚本,该脚本遍历我的远程服务器 IP 列表,通过 netcat (telnet) 连接每一行,并运行一些命令。
问题是我似乎无法弄清楚如何终止 netcat,以便脚本可以循环到列表中的下一个 IP。
这是相关的部分:
#!/bin/bash
while ISF= read -r line;do
(
sleep 3
printf 'command1'
sleep 3
printf 'command2'
sleep 3
) | nc $line
done < ~/servers.txt
远程服务器不发送 EOF,所以我可以在 netcat 上使用echo 或printf 来终止 netcat 以便脚本可以再次循环吗?我真的不想为超时设置-w 标志,因为我需要在很多服务器上执行此操作,而超时会使其花费更长的时间。
【问题讨论】:
-
嗯,只是一个很长的猜测:
printf 'echo "QUIT"'? -
不,这行不通,因为这只会将单词“QUIT”发送到远程服务器。我会假设 netcat 中有某种类似于 telnet (CTRL+]) 的转义函数,但我不知道它是什么。
-
但是将退出命令发送到活动连接会关闭当前连接...不是吗?无论如何,
printf 'echo "^Z"'IIRC。 -
查看Bash FAQ 001 了解逐行遍历文件的正确方法。
-
@chepner 谢谢,我只是很快把它放在一起。代码在上面更新。
标签: bash ubuntu-14.04 terminate netcat