用ssh执行su -c

我试图通过SSH检查服务器的BIOS版本,这是一个需要root权限的命令:

ssh remote-server su -c dmidecode 

但是这当然会失败,错误:

标准中必须是一个tty

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

使用-t强制ssh分配一个tty:

 ssh -t -t remote-user su -c dmidecode 

你也可以考虑让root直接SSH。 如果您使用公钥authentication,这可能会更安全,因为您不会传递密码。 如果您决定这样做,请考虑通过在/etc/security/access.conf以下内容来阻止除可信IP地址之外的任何地方的rootlogin:

 + : root : 10.20.30.40 - : root : ALL EXCEPT LOCAL 

并确保在sshd_config未禁用UsePAM

你不能以标准用户身份login到远程服务器,然后使用sudo

你也可以尝试引用被ssh执行的命令,如

 ssh remote-server 'su -c dmidecode' 

要么

 ssh remote-server "su -c dmidecode"