su - Desbloqueia automaticamente a chave ssh

2

No Linux existe uma ferramenta - acredito que é o ssh-agent - que pode desbloquear automaticamente a chave ssh, para que ao usar o git para buscar a partir de um repositório remoto ele use automaticamente a chave privada destravada e não precise para digitar uma senha.

Agora, estou usando su para alternar para outro usuário e, quando faço uma git pull dessa sessão su , ele sempre me pergunta a senha da minha chave privada. Gostaria de saber se existe uma maneira de desbloquear automaticamente a chave privada enquanto altero para outro usuário com o comando su .

Portanto, mude para o usuário Eu geralmente uso su otheruser e insiro a senha desse usuário.

Atualização: Eu finalmente consegui que isso funcione. Aqui estão mais algumas informações, suponha que alice seja o usuário que usei para fazer login na minha sessão gráfica, e bob seja o usuário em que eu su . A opção -m para su não é necessária.

alice@earth $ps aux|grep ssh-agent
# added backlash to emphasize line break
alice  29878  0.0  0.0  10616   316 ?        Ss   15:49   0:00 \
    /usr/bin/ssh-agent /usr/bin/dbus-launch --exit-with-session \
    /usr/bin/im-launch \
    /usr/local/bin/my-session

alice@earth $echo $SSH_AUTH_SOCK
/tmp/ssh-nFneWW1biI9Q/agent.29796

alice@earth $echo $SSH_AGENT_PID
29878

Agora eu sugo em bob

alice@earth $su bob
Password:

bob@earth $echo $SSH_AGENT_PID
29878

bob@earth $echo $SSH_AUTH_SOCK
/tmp/ssh-nFneWW1biI9Q/agent.29796

bob@earth $eval $(ssh-agent)
SSH_AUTH_SOCK=/tmp/ssh-unCratTnFl4M/agent.6144; export SSH_AUTH_SOCK;
SSH_AGENT_PID=6145; export SSH_AGENT_PID;
echo Agent pid 6145;


bob@earth $echo $SSH_AGENT_PID
6145

bob@earth $echo $SSH_AUTH_SOCK
/tmp/ssh-unCratTnFl4M/agent.6144

Por fim, chamo ssh-add :

bob@earth $ssh-add ~/.ssh/id_rsa
Enter passphrase for /home/bob/.ssh/id_rsa:
Identity added: /home/bob/.ssh/id_rsa (/home/bob/.ssh/id_rsa)

Depois disso, quando eu executar git pull , não preciso mais digitar a senha.

    
por lanoxx 05.09.2015 / 20:32

1 resposta

4

Alguma teoria

ssh-agent é acessado por meio do soquete, que é armazenado na variável de ambiente chamada SSH_AUTH_SOCK . Isso provavelmente se foi se você usar su (por motivos de segurança). Você pode evitar esse comportamento usando a opção -m como páginas de manual para su(1) propõe:

-m, -p, --preserve-environment
    Preserve the current environment, except for:

Mas (também por motivos de segurança), esse soquete é acessível apenas para o usuário que o criou:

$ ll $SSH_AUTH_SOCK
srwxrwxr-x 1 jakuje jakuje 0 Sep  2 21:23 /run/user/1000/keyring/ssh

Se você tem algum grupo seguro com o qual deseja compartilhar este soquete, você pode ajustar a ACL para este soquete, mas eu não recomendo que você torne o mundo gravável!

Para a pergunta

Depois de su , você alterará o usuário e não terá mais acesso ao soquete original. Você precisará executar o novo ssh-agent e adicionar as chaves a ele (e desbloqueá-las manualmente):

eval 'ssh-agent'
ssh-add path/to/your_key

A outra possibilidade é usar gnome-keyring-daemon , que faz basicamente a mesma coisa, mas pode esconder isso por trás de alguma senha mestra (geralmente senha de login). Mas a questão não indica a ferramenta usada, então só posso adivinhar qual é a intenção.

    
por 05.09.2015 / 22:13