Я знаю, как заставить пользователя перейти по 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
В конце концов, я буду использовать это решение для запуска rsync как apache
пользователь.
как насчет добавления следующего в /etc/sudoers
someuser ALL = (apache) NOPASSWD: /usr/bin/rsync [options]
это позволит некоторым пользователям запускать sudo -u apache /usr/bin/rsync [options]
без пароля (удобно для сценариев ... просто явно вставьте параметры rsync, чтобы они не могли ничего / кроме / этого.)
Это было у Зоредаш. Ни один параметр, который я передал в командной строке, не мог спасти меня, поскольку для файла закрытого ключа было установлено значение 600
разрешения и принадлежат моему собственному пользователю. Виноват. Извинения всем :-(
Просто создайте /var/www/.ssh/ и дайте apache разрешение на запись для него или измените $ HOME apache на каталог, в который он может писать.