【发布时间】:2017-10-19 03:54:50
【问题描述】:
如果我在某些主机上运行以下脚本:
ssh -t myhost /usr/bin/sudo /bin/bash <<'HERE_DOCUMENT'
whoami
uptime
exit
HERE_DOCUMENT
我得到以下输出:
Pseudo-terminal will not be allocated because stdin is not a terminal.
sudo: sorry, you must have a tty to run sudo
因为 sudo 设置启用了 requiretty。我不想更改该设置。
所以我对existing StackOverflow answer 的修复是向 ssh 添加 -tt 选项。
ssh -tt myhost /usr/bin/sudo /bin/bash <<'HERE_DOCUMENT'
whoami
uptime
exit
HERE_DOCUMENT
但这会产生另一个问题,输出变得过于冗长:
[root@myhost ec2-user]# whoami
root
[root@myhost ec2-user]# uptime
03:44:29 up 2 days, 3:26, 2 users, load average: 0.00, 0.01, 0.05
[root@myhost ec2-user]# exit
exit
Connection to myhost closed.
删除提示和命令回显的最佳方法是什么?
这些命令只是示例,我确实需要 sudo 访问权限才能运行特权命令。
【问题讨论】:
-
既然您有
sudo访问权限,也许您可以将您的公钥添加到~root/.ssh/authorized keys,然后执行ssh root@myhost /bin/bash < HERE_DOCUMENT [...]。换句话说,只需通过 ssh 以 root 身份登录,而不是在到达那里后运行sudo。 -
您应该将其发布为答案。这可以帮助其他人。就我而言,我想尽量减少对远程系统的任何更改。并不总是允许 root 直接 ssh 到主机。