从文件读取时,通过SSH编写sudo脚本的行为很奇怪

时间:2012-08-16 01:59:17

标签: bash ssh sudo

我发现我可以在bash脚本中在远程系统上运行单个sudo命令。例如:

#!/bin/bash

ssh -t <REMOTE_IP> 'sudo ls /root'

但是,如果我尝试通过包含远程系统IP的文件循环运行相同的命令,它开始变得奇怪。它无法使用-t选项分配TTY,因此我使用了两个(-t -t)。这样做可以获得密码提示。然后它告诉我,当我甚至没有输入密码时,我的密码不正确,显示第二个提示,它回复了我的密码然后在我输入后挂起。

此类脚本的一个示例:

#!/bin/bash

while read i
do
    ssh -t -t $i "sudo ls /root"
done < ip.list

我看到的结果示例:

user@opensuse:~/bin> ./test.sh 
10.153.171.131

[sudo] password for user: 
Sorry, try again.
[sudo] password for user: Pa55w0rd
^CKilled by signal 2. *This is where it hangs and I have to kill it.*

我没有找到解释的方式,所以如果有人能够对此有所了解,我将非常感激。

感谢。

1 个答案:

答案 0 :(得分:3)

您正在循环中重定向stdin

while read i
do
    ssh -t -t $i "sudo ls /root"
done < ip.list

这意味着(a)ssh不再与您的TTY相关联,并且(b)它可能会占用您的输入。理想情况下,您可以将输入重定向到/dev/null的ssh,并将sudo配置为不需要TTY。但是,您可以尝试:

ssh -t $i "sudo ls /root" < /dev/tty