打开 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
窗口/选项卡,其中启动一个以test
on运行的登录 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
情况下以用户身份运行任何命令,包括以.test
sudo -i -u test
test
答案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"