我面临着一个奇怪的行为,试图通过ssh以无密码登录的方式以sudo的方式运行rsync.这是我在几十台服务器上做的事情,我遇到了这个令人沮丧的问题,连接到一对Ubuntu 18.04.4服务器上。
PREMISE
从CLIENT到SERVER的无密码SSH与账户USER的工作原理一样。
当我登录SERVER时,我可以用账户USER来进行sudo操作
在 SERVER 上,我在下面的内容中加入了以下内容 等sudoers
user ALL=NOPASSWD:usrbinrsync。
现在,如果我以用户USER的身份从机器CLIENT启动这个简单的测试,我收到了以下sudo错误信息。
$ ssh [email protected] -p 2310 sudo rsync
sudo: no tty present and no askpass program specified
此外,在SERVER的 varlogauth.log 我发现了这个错误。
sudo: pam_unix(sudo:auth): conversation failed
sudo: pam_unix(sudo:auth): auth could not identify password for [user]
我已经找到了解决办法,感谢Centos。事实上,由于Centos的配置比较复杂,所以 等sudoers (与Ubuntu或Debian相比),我被迫将我的附加配置放到了外部文件中的 etcsudoers.d 而不是直接把它放到 等sudoers
解决方法。
/etc/sudoers.d
行得通例如,这些配置行放在一个名为 等sudoers.dmy_config_file。:
Host_Alias MYSERVERHOST=192.168.1.135,localhost
# User that will execute Rsync with Sudo from a remote client
rsyncuser MYSERVERHOST=NOPASSWD:/usr/bin/rsync
为什么?/etc/sudoers
没有用?我上网搜了两天也不知道。我觉得这很晦涩难懂,很可怕。
下面是引用这篇有用的文章的内容。https:/askubuntu.coma931207。
不像 /etc/sudoers
由于 etcsudoers.d 的内容在系统升级后仍然有效,所以最好在那里创建一个文件,而不是修改 etcsudoers。
对于任何配置文件的编辑,都要由 sudo
命令 visudo
是可取的。
即
$ sudo visudo -f /etc/sudoers.d/my_config_file