Como posso executar o SSH como um usuário diferente na mesma instalação do Ubuntu?

7

Estou criando um script que executa uma série de comandos que baixam um site para uma máquina e configura tudo.

Portanto, a maioria dos comandos requer acesso root. Por exemplo, adicionando um vhost em /etc/apache2/sites-available , habilitando-o, reiniciando o apache, etc ...

Então, para fazer isso, preciso executar o script com sudo .

sudo ./install-website.sh

O site está localizado em um servidor com um repositório git que é configurado com um acesso SSH sem senha. Mas isso só funciona para o usuário dan , já que as chaves estão na minha pasta pessoal e não na pasta base da raiz.

Quando chegar a essa parte:

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

Desde que iniciei o script com sudo , o usuário que está tentando iniciar o comando git é root. Então, o host continua pedindo a senha do usuário do host.

Eu tentei o seguinte comando:

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

Mas ainda estava pedindo a senha do usuário do host.

É possível dizer a sudo para usar o caminho de início do $SUDO_USER ?

A maioria das coisas são variáveis, e tem que ser variáveis, já que vou rodar isso em mais de uma máquina.

    
por Dan 14.03.2013 / 11:29

3 respostas

4

Alternativa 1 - Configurando o sudo

O sudo é configurado no arquivo sudoers , que você deve editar somente através do comando visudo .

Este arquivo de configuração pode substituir certas variáveis de ambiente pela opção env_reset . Como proceder:

visudo

Em seguida, encontre uma linha que indique:

Defaults env_reset 

e adicione depois dele (por exemplo, com o ambiente HOME):

Defaults env_keep = "HOME"

Este exemplo é para cada configuração do sudo que você possa ter. Você também pode especificá-lo por usuário / grupo. Veja a página de manual do sudoers .

Alternativa 2 - configurando o SSH

Você pode usar o arquivo de configuração do SSH para especificar usuários, chave para usar, etc. Eu explico que em SuperUser .

Solução proposta (mas você terá que corrigir os bits ausentes e assumidos), edite o arquivo /root/.ssh/config e defina sua permissão chmod 0600 /root/.ssh/config :

Host host.com
  User dan
  IdentityFile /home/dan/.ssh/id_rsa

Então, como root, você pode fazer o próximo comando e usar as identificações SSH corretas:

git clone host.com:git-repo $PATH_TO_INSTALLATION
    
por Huygens 14.03.2013 / 13:02
3

Como o script está sendo executado como root, ele pode su direto para o usuário não-privilegiado. As raízes não precisam de sudo , sudo é para lusers; -).

Supondo que o usuário sem privilégios é dan e $ PATH_TO_INSTALLATION está definido no script ao redor:

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

Observe que $PATH_TO_INSTALLATION deve ser gravável por dan .

    
por zwets 14.03.2013 / 11:48
0

Quando gerou minha chave ssh há muito tempo com ssh-keygen , não escolhi o caminho padrão ~/.ssh/id_rsa . Graças a zwets ' comentário , eu me arrependi disso. Eu mudei minha chave e coloquei em ~/.ssh/id_rsa .

Agora, os dois comandos funcionam:

  1. com sudo

    sudo -u $SUDO_USER git clone [email protected]:git-repo $PATH_TO_INSTALLATION
    
  2. Como sugerido na resposta dos zwets

    su -lc "git clone [email protected]:git-repo $PATH_TO_INSTALLATION" $SUDO_USER
    
por Dan 14.03.2013 / 13:58

Tags