通过 ssh 执行 su -c

aar*_*ron 10 unix su ssh

我正在尝试通过 SSH 检查服务器的 BIOS 版本,该命令需要 root 权限:

ssh remote-server su -c dmidecode
Run Code Online (Sandbox Code Playgroud)

但这当然会因错误而失败:

标准输入必须是 tty

我如何使这项工作?我无法使用 sudo,当我尝试以 root@remote-server 身份登录时,它不会接受我用于“su”命令的密码。我正在使用 RedHat Enterprise Linux 4。

geo*_*car 13

使用-t武力ssh来分配一个tty:

ssh -t -t remote-user su -c dmidecode
Run Code Online (Sandbox Code Playgroud)

您也可以考虑允许 root 直接 ssh。如果您使用公钥身份验证,这可能更安全,因为您不会四处传递密码。如果您决定这样做,请考虑通过将以下内容放入 中来阻止除受信任 IP 地址之外的任何地方的 root 登录/etc/security/access.conf

+ : root : 10.20.30.40
- : root : ALL EXCEPT LOCAL
Run Code Online (Sandbox Code Playgroud)

并确保UsePAM没有被禁用sshd_config

  • 您在示例中包含两个 `-t` 的原因是什么? (2认同)
  • 根据手册页,多个 -t 选项“强制 tty 分配,即使 ssh 没有本地 tty” (2认同)