打开终端,运行 SSH 然后切换用户

打开终端,运行 SSH 然后切换用户

打开 GNOME 终端后,我通过执行以下操作设法通过 SSH 连接到远程主机:

gnome-terminal -- bash -c "ssh -i ~/.ssh/virtual_machines remote@remotehost; exec bash;"

但是,一旦我通过 SSH 连接到远程主机,我想通过执行sudo su test.我已经在 visudo 中添加了命令:

%wheel  ALL=(ALL)       NOPASSWD:/bin/su test

一旦我切换到测试,测试用户将启动一个程序并保留在该程序上。

修改 .bashrc 文件不是一个选项,因为我也以该用户身份使用 SSH,并且不希望程序自动启动。

答案1

假设您要启动一个gnome-terminal窗口/选项卡,其中启动一个以teston运行的登录 shell 会话remotehost,那就是:

gnome-terminal -- ssh -i ~/.ssh/virtual_machines -t remote@remotehost 'exec sudo -iu test'

su与 结合使用sudo对我来说听起来有点愚蠢。sudo可以做su能做的事情,并为您提供更大的灵活性来定义谁允许做什么。

%wheel  ALL=(test) NOPASSWD: ALL

将允许组中的任何用户在没有密码提示的wheel情况下以用户身份运行任何命令,包括以.testsudo -i -u testtest

答案2

后面exec bash的ssh命令并没有做任何事情。分号分隔初始 shell 中的命令,而不是 ssh 会话中的命令。要在 ssh 会话中启动命令,只需附加要执行的命令即可。

接下来,切换到用户测试怎么样

  • 在 ssh 到远程主机之前

    sudo su test
    ssh remotehost programname
    

    为此,您可能需要.ssh/authorized_keys在远程主机上创建一个包含用户测试的公钥的文件。然后您将不需要密码即可登录。

  • 或者在 ssh 到远程主机时?

    ssh test@remotehost programname
    

    为此,您可能需要.ssh/authorized_keys在远程主机上创建一个文件,其中包含你的公钥。然后您将不需要密码即可登录。

  • 或者你可以这样做

    ssh -t remotehost "sudo su test -c programname"
    

相关内容