Как я могу запустить SSH от имени другого пользователя в той же установке Ubuntu?

Я создаю сценарий, который запускает серию команд, которая загружает веб-сайт на компьютер и настраивает все.

Таким образом, большинству команд требуется 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 машине .

7
задан 14 March 2013 в 14:29

3 ответа

Альтернативный 1 - Настраивающий sudo

Sudo, настраивают в sudoers файл, который необходимо только отредактировать через visudo команда.

Этот конфигурационный файл может переопределить определенные переменные среды с опцией env_reset. Как продолжить двигаться:

visudo

Затем найдите строку, которая указывает:

Defaults env_reset 

и добавьте после него (например, пример с ДОМОМ environement):

Defaults env_keep = "HOME"

Этот пример для каждой sudo конфигурации, которую Вы можете иметь. Можно также указать его на на основание пользователя/группы. См. sudoers страницу руководства.

Альтернативные 2 - настраивающий SSH

Можно использовать конфигурационный файл 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
4
ответ дан 14 March 2013 в 14:29

Поскольку скрипт выполняется от имени пользователя 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.

0
ответ дан 14 March 2013 в 14:29

Когда я давным-давно сгенерировал свой ключ ssh с помощью ssh-keygen, я не выбрал путь по умолчанию ~/.ssh/id_rsa. Благодаря zwets ' комментарию я вспомнил это. Я изменил свой ключ и вставил его в ~/.ssh/id_rsa.

Теперь обе команды работают:

  1. С sudo

    sudo -u $SUDO_USER git clone user@host.com:git-repo $PATH_TO_INSTALLATION
    
  2. Как предложено в ответе zwets

    su -lc "git clone user@host.com:git-repo $PATH_TO_INSTALLATION" $SUDO_USER
    
0
ответ дан 14 March 2013 в 14:29

Другие вопросы по тегам:

Похожие вопросы: