这不是重复的这个问题。我使用 ssh 和密钥对(不需要密码)登录远程服务器。在远程服务器上,我的脚本需要其他内容的密码。
当我登录并执行脚本时,系统会提示我输入密码,一切正常:
my-local> ssh my-remote
my-remote> ./my-script
Password for something else: ***
OK
my-remote> exit
当我尝试一步执行此操作时,出现类似错误
my-local> ssh my-remote ./my-script
fatal: could not read Password for .... No such device or address
我真的不介意输入密码如果我能的话。
然而,作为一个附带问题,我想知道是否可以以安全的方式从“my-local”传递密码(我不想将其存储在“my-remote”的脚本中)。
两台服务器都是 Ubuntu 16.04。
答案1
该工具正在读取tty
,如果您向 指定命令ssh
,它不会在远程服务器上为您分配 TTY,因此它将失败。您可以ssh
使用交换机强制在远程服务器上分配 TTY -t
。
ssh -t my-remote ./my-script
应该为你做这项工作。
答案2
某些程序直接从 /dev/tty 读取,而不是从 stdin 读取。例如“passwd”。所以很难编写它们的脚本。 Expect 是解决这个问题的一种方法 - 它可以通过向程序提供输入来欺骗程序:
https://stackoverflow.com/questions/8236699/script-to-change-password-on-linux-servers-over-ssh
它还可以帮助满足不将密码存储在每台服务器上的脚本或配置文件中的要求 - 它们都将存储在中央计算机上,当然,您将密切保护它......