【问题标题】:Switching users in remote ssh command execution在远程 ssh 命令执行中切换用户
【发布时间】:2023-04-05 21:37:01
【问题描述】:

我想知道为什么在ssh 命令中执行su 似乎没有在执行后续命令之前切换用户的预期效果,如下图所示:

以下命令:

bob@server1:~$ sudo ssh -n root@server2 "su bob; env"

产生以下输出:

...
USER=root
PWD=/root
HOME=/root
LOGNAME=root
...

我希望输出能够反映用户 bob 观察到的结果,但它是 root 用户的环境。但是,我发现以下命令可以达到预期的效果:

bob@server1:~$ sudo ssh -n root@server2 "su bob -c \"env\""

此命令产生以下输出:

...
USER=bob
PWD=/root
HOME=/users/bob
LOGNAME=bob
...

我想了解为什么第一种方式(执行"su bob; env")不起作用。

【问题讨论】:

    标签: ssh su


    【解决方案1】:

    首先考虑su 命令的作用:它以目标用户的身份启动一个新的shell。暂时忽略 ssh,只需在本地系统上成为 root 并尝试运行以下内容:

    su someuser; env
    

    会发生什么?您将获得一个名为someuser 的shell,当您退出该shell 时,env 命令将在root 的环境中执行。如果你想以someuser 运行env 命令,你需要:

    su someuser -c env
    

    这指示susomeuser 的身份运行env 命令。

    当你运行时:

    sudo ssh -n root@server2 "su bob; env"
    

    su 生成的 shell 立即退出,因为您已禁用标准输入(使用-n),并且env 命令在root 的环境中执行,就像在此示例中一样。

    【讨论】:

      猜你喜欢
      • 2015-03-29
      • 1970-01-01
      • 2010-12-25
      • 1970-01-01
      • 2017-02-08
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多