su 在执行提示输入密码的命令时行为不当

su 在执行提示输入密码的命令时行为不当

我的 Debian 服务器中有 2 个用户,gooduserroot

命令my_cmd提示输入密码(它连接到 ssh 服务器)。

当我执行my_cmdgooduser,一切都按预期进行:

gooduser@debian:/mydir$ my_cmd
[email protected]'s password: 
Permission denied, please try again.
[email protected]'s password: 
Permission denied, please try again.
[email protected]'s password: 
Permission denied (publickey,password).
fatal: The remote end hung up unexpectedly
gooduser@debian:/mydir$

上面,我通过按三次回车键来忽略密码提示。为什么,我很快就会告诉你。

但是,当我以 身份登录时root,我尝试以my_cmd用户身份执行gooduser(我必须这样做,这样创建的任何文件都将归 拥有myuser)。但是,它不会提示我输入密码,一次也没有,而且它的工作方式就像我按了 3 次回车键一样,只是我没有按(“权限被拒绝”消息与上面的相同):

root@debian:/mydir# su - gooduser -c "cd $PWD; my_cmd"
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,password).
fatal: The remote end hung up unexpectedly
root@debian:/mydir#

为什么会发生这种情况?为什么要su忽略密码提示?或者更准确地说,为什么它似乎代表我按下回车键?更重要的是,我该如何解决这个问题?

(我知道我可以配置 ssh 密钥以实现无密码登录,也许这就是我最终会做的,但我想知道这里更深层次的问题是什么)。

答案1

ssh 尝试打开/dev/tty以获取密码,但系统不允许除当前登录终端的用户之外的其他用户执行此操作。因此 ssh 无法读取密码。

答案2

我最终使用了sudo

sudo -i -u gooduser -H bash -c "cd $PWD; my_cmd"

使用此命令,系统会按预期提示我输入密码。-i是必要的,以便$PATH正确设置,否则我的命令会失败。

至于为什么su会失败,我仍然不知道。su在 Ubuntu 12.04 中可以使用,但在 Debian 中却不行(因此我提出了这个问题),所以我不确定 qqx 的解释是否适用。

相关内容