使用ssh

时间:2015-12-05 09:44:21

标签: bash shell scripting

您好我的文件名绑定在下面的条目:

testnode1 eth0
tetnode2  eth2

现在我正在编写一个bash脚本,使用while将该条目放入变量,然后将其用于下面的命令:

ssh $serv ifconfig | grep $nic

问题是它在第一次阅读之后的早期退出" testnode1"它没有执行下一行" testnod2"

以下是整个代码:

#!/bin/bash
cat bonding | while read line
do
    serv=$(echo $line | awk '{print $1}')
    nic=$(echo $line | awk '{print $2}')
    echo $serv
    ssh $serv ifconfig | grep $nic
done

输出:

testnode1
eth0      Link encap:Ethernet  HWaddr 00:0C:29:99:C0:CD 

预期产出

testnode1
eth0      Link encap:Ethernet  HWaddr 00:0C:29:99:C0:CD  
testnode2
eth2      Link encap:Ethernet  HWaddr 00:0A:30:40:QB:A1  

有人能指出我的错误,谢谢

1 个答案:

答案 0 :(得分:1)

那是因为ssh从stdin读取。由于您要循环读取文件,ssh会读取所有内容,并且在下一次迭代中,没有什么可读的了。因此,循环在一次迭代后退出。

你可以这样做:

ssh "$serv ifconfig | grep $nic" </dev/null

ssh -n $serv ifconfig | grep $nic

来自ssh手册:

 -n   
     

从/ dev / null重定向stdin(实际上,阻止从stdin读取)。当在ssh中运行ssh时必须使用它   背景。一个常见的技巧是使用它来运行X11程序   远程机器。例如,ssh -n shadows.cs.hut.fi emacs&amp;将   在shadows.cs.hut.fi上启动emacs,X11连接将是   通过加密频道自动转发。 ssh程序   将放在后台。 (如果ssh需要,这不起作用   要求输入密码或密码;另见-f选项。)