我的 Debian 服务器中有 2 个用户,gooduser
和root
。
命令my_cmd
提示输入密码(它连接到 ssh 服务器)。
当我执行my_cmd
时gooduser
,一切都按预期进行:
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 的解释是否适用。