我已经创建了一个shell脚本,如下所示。我需要隐藏密码,我将在脚本提示时给出密码。如果我在本地机器的单引号内运行下面的脚本,它将隐藏密码。但如果我添加SSH部分,它就不会。
隐藏密码该怎么办?
ssh root@10.3.2.0 'echo -n Password:; read -s password; echo; echo $password; '
答案 0 :(得分:5)
尝试使用-t
选项来强制进行tty分配。
ssh -t root@10.3.2.0 'echo -n Password:;
read -s password;
echo;
echo $password;'
编辑:对建议解决方案的解释
如果没有运行登录会话而只是一个命令,则默认情况下,SSH不会为正在运行的进程分配伪终端设备。 这种行为不是一个错误,而是由设计选择的。
这样就可以在不同的机器之间传递未解释的二进制数据。 也许是这样的:
ssh whoever@wherever 'cat remote_file' | local_program
如果数据被中间的终端驱动程序过滤,这种方式在两台机器之间传递数据几乎是不可能的 - 想想你需要关注的大量转义序列!
如果没有分配任何终端,则无法隐藏用户输入。任何stty something
的尝试都会失败,因为根本没有任何终端!
要使ssh分配一个伪终端,即使没有在登录会话中运行,你也必须传递-t
参数来强制tty分配。
答案 1 :(得分:0)
最好使用ssh密钥,这样就不需要在ssh-agent
的帮助下传递密码了。看一个好的方法:https://wiki.archlinux.org/index.php/SSH_Keys
答案 2 :(得分:0)
我是脚本的新手,但我想这可能会对你有所帮助:
#!/bin/sh
echo -n "Enter Password : "
stty -echo
read password < /dev/tty
stty echo
echo
echo -n "Enter Password again : "
stty -echo
read password1 < /dev/tty
stty echo
echo
echo "Password Entered are : $password and $password1"