在远程服务器上使用 ssh 执行 sudo su 不起作用

Doing sudo su with ssh on a remote server not working

这似乎是 Whosebug 上的一个热门问题,但似乎对我没有任何帮助

我会先解释我的问题,然后再去尝试我尝试过的解决方案

我需要做的是从serverAsshserverB。为此,我在服务器上设置了 rsa 加密,我可以成功地通过 ssh 连接到 serverB

我用

ssh user@hostname

现在我想在 serverB 上执行某些命令。第一个是切换到 app 用户。为此,我需要 运行 sudo su - app 命令,但我也想在同一行中提供密码,这样它就不会再次提示输入密码。

所以我尝试先直接在 serverB 上用密码 运行 sudo su - app 命令来测试

我试过以下方法

echo "password" | sudo su - app

sudo -S  <<< "password" su - app

echo "password" | sudo -S su - app

echo 'passowrd' | sudo 'su -c - app'

但是 none 以上解决方案对我有用。

我能得到的最接近的是

echo "password" | script -c "sudo su - app"

它在哪里接受密码并显示给我

app@hostname [/app]
$

然而,当我 运行 命令 whoami 时,它仍然显示 user 而不是 app。然而,当我直接 运行 sudo su - app 并提供通行证然后 运行 whoami 它给了我 app

我正在尝试 运行 使用 ssh 命令

ssh user@hostname -t 'echo "password" | script -c "sudo su - app"'

P.S. 用户 user 没有 root 访问权限,而且我无法使用任何插件,因为我没有有权做同样的事情

我的服务器是Redhat 6.2

希望我能解释清楚。寻找一些可以提供帮助的答案。

抱歉我的英语不好。感谢帮助。

如果我们使用 rsa 密钥加密设置 ssh,那么我们就不需要使用密码。

为了使用 public/private 密钥启用 ssh,我遵循

  1. serverA

    上的用户生成 public/private key
    ssh-keygen -t rsa
    
  2. 转到 .ssh/id_rsa.pub 文件并复制 public 密钥

  3. 登录ServerB,然后sudo su - app更改为应用程序用户。在文件 .ssh/authorized_key 中复制 public 键。

  4. 尝试 sshserverB 现在从 serverA 喜欢

    ssh app@hostnameServerB
    

无需密码即可运行。