我知道如何让用户使用密钥通过 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
为的变体/dev/null
,但这些都没有奏效。我知道这sudo
可能可以解决这个问题,但我试图避免需要手动服务器配置,因为此代码将部署在许多不同的环境中。
有任何想法吗?
以下是我尝试过的几个无效的例子:
$ 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
最终,我将使用此解决方案以apache
用户身份运行 rsync。
答案1
只需创建 /var/www/.ssh/ 并授予 apache 写入权限或将 apache 的 $HOME 更改为可以写入的目录。
答案2
Zoredache 遇到了这个问题。我在命令行中传递的任何选项都无法拯救我,因为私钥文件已设置为600
权限并由我自己的用户拥有。我的错。向所有人道歉 :-(
答案3
如何将以下内容添加到/etc/sudoers
someuser ALL = (apache) NOPASSWD: /usr/bin/rsync [options]
这将允许某些用户无需密码即可运行sudo -u apache /usr/bin/rsync [options]
(方便编写脚本...只需明确插入 rsync 选项,这样他们就不能做任何事情/但是/那样。)