Я создаю сценарий, который запускает серию команд, которая загружает веб-сайт на компьютер и настраивает все.
Таким образом, большинству команд требуется root-доступ. Например, добавление vhost в /etc/apache2/sites-available
, его включение, перезапуск apache и т. Д.
Итак, чтобы сделать это, мне нужно запустить скрипт с sudo
.
sudo ./install-website.sh
Веб-сайт расположен на сервере с репозиторием git, который настроен с доступом по SSH без пароля. Но это работает только для пользователя dan
, поскольку ключи находятся в моей домашней папке, а не в корневой папке пользователя.
Итак, когда он достигает этой части:
git clone user@host.com:git-repo $PATH_TO_INSTALLATION
Так как я запустил скрипт с sudo
, пользователь, который пытается инициировать команду git, является root. Поэтому хост продолжает спрашивать пароль пользователя хоста.
Я попробовал следующую команду:
sudo -u $SUDO_USER git clone user@host.com:git-repo $PATH_TO_INSTALLATION
Но он все еще спрашивал пароль пользователя хоста.
Можно ли сказать sudo
использовать домашний путь $SUDO_USER
?
Большинство вещей являются переменными, и должны быть переменными, так как я буду запускать это на более чем 1 машине .
Sudo, настраивают в sudoers
файл, который необходимо только отредактировать через visudo
команда.
Этот конфигурационный файл может переопределить определенные переменные среды с опцией env_reset
. Как продолжить двигаться:
visudo
Затем найдите строку, которая указывает:
Defaults env_reset
и добавьте после него (например, пример с ДОМОМ environement):
Defaults env_keep = "HOME"
Этот пример для каждой sudo конфигурации, которую Вы можете иметь. Можно также указать его на на основание пользователя/группы. См. sudoers страницу руководства.
Можно использовать конфигурационный файл SSH для определения пользователей, ключа к использованию, и т.д. Я имею, объясняет это в SuperUser.
Предлагаемое решение (но необходимо будет исправить пропавших без вести и принятые биты), отредактируйте файл /root/.ssh/config
и набор его разрешение chmod 0600 /root/.ssh/config
:
Host host.com
User dan
IdentityFile /home/dan/.ssh/id_rsa
Затем как корень, можно сделать следующую команду, и это будет использовать надлежащие идентификации SSH:
git clone host.com:git-repo $PATH_TO_INSTALLATION
Поскольку скрипт выполняется от имени пользователя root, он может su
прямиком к непривилегированному пользователю. Корни не нужны sudo
, sudo
для лузеров; -).
Предполагается, что непривилегированный пользователь равен dan
, а $ PATH_TO_INSTALLATION установлен в окружающем скрипте:
su -lc "git clone user@host.com:git-repo $PATH_TO_INSTALLATION" dan
Обратите внимание, что $PATH_TO_INSTALLATION
должен быть доступен для записи в dan
.
Когда я давным-давно сгенерировал свой ключ ssh с помощью ssh-keygen
, я не выбрал путь по умолчанию ~/.ssh/id_rsa
. Благодаря zwets ' комментарию я вспомнил это. Я изменил свой ключ и вставил его в ~/.ssh/id_rsa
.
Теперь обе команды работают:
С sudo
sudo -u $SUDO_USER git clone user@host.com:git-repo $PATH_TO_INSTALLATION
Как предложено в ответе zwets
su -lc "git clone user@host.com:git-repo $PATH_TO_INSTALLATION" $SUDO_USER