【问题标题】:Remove verbosity from sudo with pseudo-terminal使用伪终端从 sudo 中删除冗长
【发布时间】: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 &lt; HERE_DOCUMENT [...]。换句话说,只需通过 ssh 以 root 身份登录,而不是在到达那里后运行sudo
  • 您应该将其发布为答案。这可以帮助其他人。就我而言,我想尽量减少对远程系统的任何更改。并不总是允许 root 直接 ssh 到主机。

标签: linux bash shell ssh sudo


【解决方案1】:

如果您不想要交互式 shell 会话,请不要在 tty 上启动交互式 shell。只需启动一个以非交互方式运行命令的 shell:

ssh -tt host "sudo bash -c '
  whoami
  uptime
  '"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    • 2014-03-10
    • 2015-06-26
    • 2020-07-09
    • 2010-10-28
    • 2015-10-13
    • 1970-01-01
    相关资源
    最近更新 更多