2


我已经创建了一个如下所示的 shell 脚本。我需要隐藏密码,当脚本提示时我会给出密码。如果我在本地机器的单引号内运行以下脚本,它将隐藏密码。但如果我添加 SSH 部分,它不会。

我应该怎么做才能隐藏密码?

ssh root@10.3.2.0 'echo -n Password:;
read -s password;
echo;
echo $password;
'
4

3 回答 3

5

尝试使用-tssh 选项来强制分配 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。

于 2013-03-01T10:16:28.583 回答
0

最好使用 ssh 密钥,这样,无需借助ssh-agent. 查看一个很好的方法:https ://wiki.archlinux.org/index.php/SSH_Keys

于 2013-03-01T09:59:19.290 回答
0

I am new to scripts, though I guess this might can help you :

#!/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"
于 2013-03-01T12:09:27.860 回答