我有一个脚本,它提示用户输入他们的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
发布于 2013-07-02 23:43:05
试试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-03 05:45:48
老实说,我还没有发现这里的问题。但我经常手动重定向输出以使其静默:
ssh -tt remote_host sudo cat /etc/cma.conf <<EOP >& /dev/null
我不确定这是否会有帮助。
https://stackoverflow.com/questions/17429432
复制相似问题