如果我在某些主机上运行以下脚本:
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的修正是将-tt选项添加到ssh。
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访问权限才能运行特权命令。
答案 0 :(得分:1)
如果您不想进行交互式shell会话,请不要在tty上启动交互式shell。只需启动一个以非交互方式运行命令的shell:
ssh -tt host "sudo bash -c '
whoami
uptime
'"