2

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

#!/bin/bash

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

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

这种脚本的一个例子:

#!/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.*

我没有找到太多的解释方式,所以如果有人能对此有所了解,我将不胜感激。

谢谢。

4

1 回答 1

3

stdin您正在循环内重定向:

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

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

ssh -t $i "sudo ls /root" < /dev/tty
于 2012-08-16T02:04:17.883 回答