2

我有一个脚本提示用户输入他们的 sudo 密码,然后遍历主机列表并在远程主机上执行命令。我可以“读取 -s”以静默获取他们的密码,但是每次在远程主机上使用他们的密码时,它都会回显到终端。在本地主机上更改 stty 没有帮助。例子:

#!/bin/sh -x

echo "Enter sudo pass:"
read -s SUDOPASS

stty_orig=$(stty -g)
stty -echo
ssh -tt remote_host sudo cat /etc/cma.conf <<EOP
$SUDOPASS
EOP
stty $stty_orig

输出仍然包含密码:

+ ssh -tt remote_host sudo cat /etc/cma.conf
My_P4ssW0rd!
Password:
<?xml version="1.0" encoding="UTF-8"?>
...

在远程主机上使用 stty 也无济于事:

stty_orig=$(ssh -t remote_host stty -g)
ssh -t remote_host stty -echo
ssh -tt remote_host sudo cat /etc/cma.conf <<EOP
$SUDOPASS
EOP
ssh -t remote_host stty $stty_orig

FWIW,我主要关心 OSX bash/sh

4

2 回答 2

1

尝试expect

#!/bin/sh

echo "Enter sudo pass:"
read -s SUDOPASS

expect -c 'spawn ssh -tt remote_host sudo cat /etc/cma.conf ; expect -re "\\\[sudo\\\] password for .*:"; send "'"$SUDOPASS"'\n";interact'
于 2013-07-02T15:43:05.267 回答
0

老实说,我还没有发现这里的问题。但我经常手动重定向输出以使其静音:

ssh -tt remote_host sudo cat /etc/cma.conf <<EOP >& /dev/null

我不确定这是否会有所帮助。

于 2013-07-02T21:45:47.743 回答