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

7

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

Таким образом, для большинства команд требуется root-доступ. Например, добавив vhost в /etc/apache2/sites-available , включив его, перезапустив apache и т. Д.

Итак, для этого мне нужно запустить скрипт с sudo .

sudo ./install-website.sh

Веб-сайт расположен на сервере с репозиторием git, который настроен с использованием SSH без пароля. Но это работает только для пользователя dan , поскольку ключи находятся в моей домашней папке, а не в домашней папке root.

Итак, когда он достигнет этой части:

git clone [email protected]:git-repo $PATH_TO_INSTALLATION

Поскольку я начал скрипт с sudo , пользователь, который пытается инициировать команду git, является root. Поэтому хост продолжает запрашивать пароль пользователя хоста.

Я пробовал следующую команду:

sudo -u $SUDO_USER git clone [email protected]:git-repo $PATH_TO_INSTALLATION

Но он все еще запрашивал пароль пользователя хоста.

Можно ли указать sudo использовать домашний путь $SUDO_USER ?

Большинство вещей являются переменными и должны быть переменными, поскольку я буду запускать это на более чем 1 машине.

    
задан Dan 14.03.2013 в 10:29
источник

3 ответа

4

Альтернатива 1 - Конфигурирование sudo

Sudo настраивается в файле sudoers , который вы должны редактировать только с помощью команды visudo .

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

visudo

Затем найдите строку, которая гласит:

Defaults env_reset 

и добавьте после него (например, пример с домашней обложкой HOME):

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

Затем, как root, вы можете сделать следующую команду, и она будет использовать правильные идентификаторы SSH:

git clone host.com:git-repo $PATH_TO_INSTALLATION
    
ответ дан Huygens 14.03.2013 в 12:02
источник
3

Так как скрипт работает от имени root, он может su прямо к непривилегированному пользователю. Корни не нужны для sudo , sudo для lusers; -).

Предполагая, что непривилегированный пользователь dan , и $ PATH_TO_INSTALLATION установлен в окружающем скрипте:

su -lc "git clone [email protected]:git-repo $PATH_TO_INSTALLATION" dan

Обратите внимание, что $PATH_TO_INSTALLATION должно быть доступно для записи dan .

    
ответ дан zwets 14.03.2013 в 10:48
0

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

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

  1. С sudo

    sudo -u $SUDO_USER git clone [email protected]:git-repo $PATH_TO_INSTALLATION
    
  2. Как указано в ответе zwets

    su -lc "git clone [email protected]:git-repo $PATH_TO_INSTALLATION" $SUDO_USER
    
ответ дан Dan 14.03.2013 в 12:58