SSH:执行 sudo 命令

SSH:执行 sudo 命令

我有一个交互式 shell 脚本,它在一个地方需要 ssh 到另一台机器(基于 Ubuntu)并以 root 身份执行某些操作(用户应该输入他的密码,但远程命令应该按照脚本中所述运行):

# ...
ssh remote-machine 'sudo ls'
# ...

但是,我总是收到此错误消息:

sudo: no tty present and no askpass program specified

好的,这很清楚。但我该如何规避这个问题?应该发生这样的事情:

$ ssh remote-machine 'sudo ls /'
[sudo] password for user1:

/bin
/etc
/var

答案1

神奇的ssh万能药,关键是添加标志-t以强制 ssh 分配伪 tty:

ssh -t remote-server 'sudo ls'

答案2

此方法将在 ssh 之后使用 sudo 运行单个脚本:

假设我们有一个具有 sudo 功能的“远程”用户,并且我们有一个希望它以 root 身份执行的脚本。

1)在密码文件 /etc/passwd登录时使用:

remote:x:1100:1100:Some Remote User,,,:/home/remote:/home/remote/login.sh

2)在“login.sh”中,我们以“sudo”身份执行想要运行的脚本:

#!/bin/bash
if [ "$(id -u)" != "0" ]; then
    #Not running as root, so we execute "sudo"
    sudo /usr/local/bin/script.sh
else
    #We are already rooted, so "sudo" is not required.
    /usr/local/bin/script.sh
fi
exit;

正常情况下,它会询问两次密码:ssh login + sudo。如果你只想输入一次,请尝试sudo 无需密码(不推荐)。<-请阅读 Boldewyn 的评论。

主要优点是“ssh”不需要任何其他参数(如 -t),并且 sudo 在服务器端强制执行。此外,一旦脚本退出,用户也会被注销。

它可能不是那么优雅,但它简单并且有效。

答案3

您可以运行以下命令获取无需交互的 root 访问权限:

ssh server " sudo command" < sudopassword.txt

相关内容