Fazendo um ssh-add no ssh / slogin se a chave não estiver no ssh-agent?


10

Quando estou executando o Gnome, o ssh-agent executa o ssh-add no slogin / ssh se a identidade não estiver carregada. Quero imitar esse comportamento em shells remotos, mas tudo o que encontro sugere a execução do ssh-add no login. Eu só quero executar o ssh-add se, posteriormente, executar o slogin / ssh no shell remoto, não sempre que eu fizer o login.

Respostas:


9

Eu criei uma solução para isso através do shell bash.

Adicione ao .bashrc:

check-ssh-add() {
if [ "$DESKTOP_SESSION" == "" ]; then
  if [[ `ssh-add -l` != *id_?sa* ]]; then 
    ssh-add -t 5h  ## 5 hour ssh-agent expiration
  fi
fi
}

slogin() {
check-ssh-add
/usr/bin/slogin $@
}

ssh() {
check-ssh-add
/usr/bin/ssh $@
}

scp() {
check-ssh-add
/usr/bin/scp $@
}

sftp() {
check-ssh-add
/usr/bin/sftp $@
}

7

Na verdade, existe uma maneira ainda mais simples. ssh-add -lretorna true (0) se houver chaves e false (1), caso contrário, sua primeira função pode ser substituída por esta:

check-ssh-add() {
  if ! ssh-add -l >/dev/null; then
      ssh-add -t 5h
  fi
}

 


1

Ainda mais simples na parte «esta é uma sessão interativa»

ssh-add -l &> /dev/null || ssh-add ~/.ssh/my_id

0

Versões mais recentes do OpenSSH podem adicionar a chave ao agente no primeiro uso, se você ativar AddKeysToAgent yeso ~/.ssh/config.

(Aprendi isso em /superuser//a/1114257/42546 . Não sei ao certo qual é a etiqueta apropriada do StackOverflow para lidar com respostas em vários sites do StackExchange.)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.