如何通过 ssh -t 远程运行 sudo 命令?

如何通过 ssh -t 远程运行 sudo 命令?

ssh -t我有一个通过并使用登录远程主机的脚本sudo service foo restart

要求是避免在远程主机上提示输入密码。远程主机通过 SSH 证书进行身份验证。远程主机上的文件sudoers允许该用户使用NOPASSWD.

然而,在我的测试过程中,系统提示我输入密码,这是不可接受的。如果我在没有-t标志的情况下手动运行它,它就会起作用。然而,-t旗帜却让一切都变得不那么重要。

有没有解决的办法?

答案1

也许禁用并运行该requiretty选项sudoersssh 没有标志-t(或与-T)有效。

添加类似这样的内容sudoers(未经测试):

Defaults:{your ssh user} !requiretty

将其与NOPASSWD您已经使用的命令结合起来,您应该能够在不分配伪 tty 的情况下运行 sudo 命令。

您还可以更改requiretty命令而不是用户。

答案2

生成 SSH 密钥并将其传输到远程主机。

  1. 使用以下命令生成 RSA SSH 密钥

    [root@localhost ~] ssh-keygen
    
    Generating public/private rsa key pair.
    Enter file in which to save the key (/root/.ssh/id_rsa):  Hit ENTER
    Enter passphrase (empty for no passphrase): Hit ENTER
    Enter same passphrase again: Hit ENTER
    
  2. /root/.ssh/id_rsa.pub使用以下命令查找该密钥并将其传输到远程:

    ssh-copy-id -i /root/.ssh/id_rsa.pub root@remote:/root
    

现在尝试登录;它不会询问您的远程密码。

答案3

对我来说,这样工作得很好,但要注意: 伪终端不会被分配,因为 stdin 不是终端

ssh -t username@hostname1 << 'EOS'
sudo sh
hostname
EOS

Pseudo-terminal will not be allocated because stdin is not a terminal.
hostname1

相关内容