我有一个 bash 脚本,用于ssh
连接到另一台服务器并在那里运行一些命令。我发现一些网站上的错误 ( Warning: no access to tty (Bad file descriptor). Thus no job control in this shell.
) 是一条友好消息,但我的 bash 脚本却“卡住”了。出现此消息后,不再执行其他命令。其他论坛据说可以用来ssh -t
压制该消息,但它对我不起作用。我的代码看起来像这样:
.
.
.
stty -echo
sshpass "pwd" ssh -o StrictHostKeyChecking=no [email protected] 'su -lc "rm -rf tmp"' 2>/dev/null
stty echo
.
.
.
我使用的原因stty-echo
是因为我需要将用户切换到root并且密码显示在终端上(我不希望这样)。Warning: no access to tty (Bad file descriptor). Thus no job control in this shell.
在连接服务器 (ip: 1.1.1.1) 上输入 root 密码后,收到错误消息 ( )。
有什么建议么?如果需要进一步解释,请告诉我。谢谢! (我的bash版本是GNU bash版本3.2.51(1))
编辑
删除时收到的错误消息2>/dev/null
是:
Warning: no access to tty (Bad file descriptor).
Thus no job control in this shell.
stty: standard input: Invalid argument
答案1
使用前可以检查是否stdin
是终端stty
:
if [[ -t 0 ]]; then stty -echo; fi
答案2
为什么不使用 ssh 密钥对,而不是尝试在终端安全地隐藏您的密码和 root 密码呢?如果运行该ssh-keygen
命令,您可以生成一个 crypto.pub 密钥,如果您将其放入每个远程主机的/root/.ssh/authorized_keys
文件中,则可以像这样执行命令:。这样您就不必再次明显地输入密码。如果您愿意,也可以将该命令添加到 crontab 中并定期设置,以便您可以花时间做其他事情。这一切都假设您生成密钥的计算机只有您有权访问,或者更清楚地说,您生成密钥的计算机上的用户帐户不是您 sudo 用户和 sudo 用户之间的共享帐户非 sudo 用户。ssh [email protected] "rm -rf tmp"
如果这有帮助但需要更好的解释,请告诉我,我会尝试在我的答案中添加更多信息。
如果您以前从未生成过密钥对,这可能会有所帮助:http://www.thegeekstuff.com/2008/11/3-steps-to-perform-ssh-login-without-password-using-ssh-keygen-ssh-copy-id/