Como faço para que o ssh-agent funcione em todos os terminais?

27

Eu configurei o login ssh automático (sem senha) em alguns servidores usando ssh-copy-id. ssh-agentfunciona apenas no terminal em que foi executado. Como faço ssh-addpara trabalhar em todos os meus terminais?

Naturalmente, eu não preferiria a chave SSH sem uma senha.

Gowtham
fonte

Respostas:

26

Se você estiver fazendo login em uma sessão gráfica, planeje iniciar ssh-agentdurante a inicialização da sessão. Algumas distribuições já fazem isso por você. Se o seu não funcionar, organize a execução a ssh-agentpartir do script de inicialização da sessão ou do gerenciador de janelas. Como fazer isso depende do seu ambiente de trabalho e do seu gerenciador de janelas. Por exemplo, se você iniciar o gerenciador de janelas manualmente, basta substituir a chamada my_favorite_wmpor ssh-agent my_favorite_wm.

Não inicie ssh-agentde .bashrcou .zshrc, pois esses arquivos são executados por cada novo shell interativo. O local para começar ssh-agenté em um arquivo de inicialização da sessão como .profileou .xsession.

Se você deseja usar o mesmo agente SSH em todos os processos, independentemente de onde você efetuou login, você pode sempre usar o mesmo nome de soquete, em vez de usar um soquete nomeado aleatoriamente. Por exemplo, você pode colocar isso em seu ~/.profile:

export SSH_AUTH_SOCK=~/.ssh/ssh-agent.$HOSTNAME.sock
ssh-add -l 2>/dev/null >/dev/null
if [ $? -ge 2 ]; then
  ssh-agent -a "$SSH_AUTH_SOCK" >/dev/null
fi
Gilles 'SO- parar de ser mau'
fonte
Para sua informação, o motivo pelo qual a verificação $? -ge 2é feita é porque o código de saída 1 é quando o ssh-agent não possui chaves, mas o ssh-agent já está em execução.
wisbucky
7

Você provavelmente deseja um programa como o Keychain , desenvolvido para esse fim exato. Na página do manual:

DESCRIPTION
   keychain is a manager for ssh-agent, typically run from ~/.bash_profile.
   It allows your shells and cron jobs to share a single ssh-agent process.
snapshoe
fonte
realmente gosto deste!
Colin D
Ótimo! obrigado. Funciona perfeitamente.
Alguém
isso funciona muito bem, depois de baixar o arquivo compactado do Github, adicione o caminho completo do diretório keychain-2.8.5 descompactado ao seu ~ / .bash_profile export PATH = $ PATH: line
Kevin Zhao
4

Aplique-o ao seu ambiente de desktop ou gerenciador de janelas. Quando eu fiz isso manualmente no passado com um costume ~/.Xclients, usei isso como a última linha:

ssh-agent mywindowmanger

Pode haver alguns DEs com suas próprias opções de configuração para isso, embora me pareça que (por exemplo) o KDE não. Atualmente, parece que o meu foi executado via código de /etc/X11/xinit/xinitrc-common(presumivelmente algo feito pelo fedora), pois está ativo para todos os usuários, independentemente do DE / WM e do comando do processo pai $HOME/.Xclients, mas esse arquivo não faz referência ssh-agent(ao contrário /etc/X11/xinit/xinitrc-common).

Se você não tiver um ~/.Xclients, poderá criar um com apenas essa linha, mas precisará conhecer o comando que inicia o seu DE / WM.

Cachinhos Dourados
fonte