Bash 如何不将此处的文档回显到终端?
我有一个脚本,提示用户输入sudo密码,然后遍历主机列表并在远程主机上执行命令。我可以“读取-s”以静默方式获取他们的密码,但每次在远程主机上使用他们的密码时,它都会回显到终端。在本地主机上更改stty没有帮助。例如:Bash 如何不将此处的文档回显到终端?,bash,ssh,heredoc,stty,Bash,Ssh,Heredoc,Stty,我有一个脚本,提示用户输入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 <<E
#!/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
#/bin/sh-x
echo“输入sudo密码:”
read-s SUDOPASS
stty_orig=$(stty-g)
stty-echo
ssh-tt远程主机sudo cat/etc/cma.confTryexpect
:
#!/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'
老实说,我还没有发现这里的问题。但我经常手动重定向输出以使其静音:
ssh -tt remote_host sudo cat /etc/cma.conf <<EOP >& /dev/null
ssh-tt remote_host sudo cat/etc/cma.conf您应该使用IFS=read-rs SUDOPASS
以防密码中有空格和反斜杠。错误,不。。。你自己试试看。“-x”就在那里,我可以跟着走。我可以在不启用调试的情况下复制此问题。哦,对不起。。。我看错了。我以为屏幕上没有打印ssh
密码。问题出在sudo
password上。更新答案。
#!/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'
ssh -tt remote_host sudo cat /etc/cma.conf <<EOP >& /dev/null