我知道如何让一个用户ssh到一个关键的另一个框:
ssh -l targetuser -i path/to/key targethost
但是像apache这样的非帐号用户呢? 由于这个用户没有一个可以写入.ssh目录的主目录,所以整个事情都会失败:
$ sudo -u apache ssh -o StrictHostKeyChecking=no -l targetuser -i path/to/key targethost Could not create directory '/var/www/.ssh'. Warning: Permanently added '<hostname>' (RSA) to the list of known hosts. Permission denied (publickey).
我已经尝试使用-o UserKnownHostsFile=/dev/null并将$HOME设置$HOME /dev/null并且这些都没有成功。 我明白, sudo可能可以解决这个问题,但我试图避免需要手动服务器configuration,因为这些代码将被部署在许多不同的环境。
有任何想法吗?
以下是我尝试过的一些不起作用的示例:
$ sudo -u apache export HOME=path/to/apache/writable/dir/ ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=path/to/apache/writable/dir/.ssh/known_hosts -l deploy -i path/to/key targethost $ sudo -u apache ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=path/to/apache/writable/dir/.ssh/known_hosts -l deploy -i path/to/key targethost $ sudo -u apache ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -l deploy -i path/to/key targethost
最终,我将使用此解决scheme以apache用户身份运行rsync。
只需创build/var/www/.ssh/并为其写入apache写入权限,或将apache的$ HOME更改为可写入的目录。
Zoredache有它。 没有一个选项我通过命令行可以保存我私人密钥文件设置为600权限,并由我自己的用户拥有。 我的错。 向所有人道歉:-(
如何将以下内容添加到/etc/sudoers
someuser ALL = (apache) NOPASSWD: /usr/bin/rsync [options]
这将允许一些用户在没有密码的情况下运行sudo -u apache /usr/bin/rsync [options] (对于脚本来说很方便…只是显式地插入rsync选项,所以它们不能做任何事情,但是/那样)。