2010-01-19 214 views
1
cat hosts.txt | while read h; do telnet $h; done 

当我运行这一点,Telnet方式登录到该拒绝连接第一台主机,但随后退出的循环,而不是在文件中的其他主机,然后退出。 为什么在第一台主机后退出循环,我该如何解决?循环第一次迭代

谢谢。

+0

剧本还有什么?特别是,它里面有“set -e”吗? – 2010-01-19 05:43:53

回答

1

telnet是交互式的。你究竟想要做什么?如果你想自动“远程登录”会话,你可以在我的bash使用SSH

while read -r host 
do 
    ssh <options> <commands> "$host" 
done <"hosts.txt" 
4

这工作得很好:

$ cat hosts.txt 
machine1 
machine3 

$ cat hosts.txt | while read h; do telnet $h; done 
Trying 9.190.123.47... 
telnet: Unable to connect to remote host: Connection refused 
Trying 9.190.123.61... 
telnet: Unable to connect to remote host: Connection refused 

然而,当我连接到一台机器拒绝连接,我得到:

$ cat hosts.txt 
machine2 
machine1 
machine3 

$ cat hosts.txt | while read h; do telnet $h; done 
Trying 9.190.123.48... 
Connected to machine2. 
Escape character is '^]'. 
Connection closed by foreign host. 

那是因为我确实连接成功和所有其他主机名正在发送到telnet会话。这些无疑用于尝试登录,其余主机名作为用户/密码无效,因此会话正在关闭。

如果你只是想以交互方式登录到每个系统,你可以使用:

for h in $(cat hosts.txt); do telnet $h 1023; done 

不会捕捉到的主机名,其余部分进入第一会议取得圆满成功。

如果您想真正实现远程登录会话的自动化,您应该查看一个工具,如expect或使用其中一个远程UNIX工具,如rsh

+0

rsh(远程shell)有一个不安全的历史。我会推荐ssh。 – ghostdog74 2010-01-19 06:37:23

1

如前所述,telnet是一个需要输入的交互式程序。

猜测第一个telnet之后,第一个之后的所有主机都将被用作输入。

目前尚不清楚您的脚本正在尝试做什么。也许你需要更清楚你想要做什么。