é possível disparar 'ssh-add key' somente quando eu ssh em uma caixa? (do Cygwin)

2

Eu tenho meu .bash_profile configurado para eval $(ssh-agent) para que eu possa me conectar rapidamente aos servidores. Se eu adicionar ssh-add ~/.ssh/id_rsa_my_key ao meu .bash_profile , terei que digitar a senha da chave ssh em todas as janelas de terminal, mesmo que eu não tenha a intenção de usar essa janela de terminal para fazer login em um servidor.

Eu poderia criar um alias para tornar trivialmente fácil digitar a linha ssh-add ~/.ssh/id_rsa_my_key (para que eu não precise interromper minha linha de pensamento sobre o que estou tentando realizar e, em vez disso, pense em como nomeei minha chave ) mas eu ainda tenho que lembrar de fazer isso antes de entrar em uma caixa.

Estou acostumado a trabalhar no OS X, onde tudo isso é tratado de forma quase transparente pelo Keychain, e eu apenas ssh sem ter que pensar em acesso. Eu prefiro não ter que mudar meus hábitos mentais, mesmo que agora eu esteja trabalhando principalmente a partir de uma caixa do Windows. No Windows, o agente ssh morre assim que eu

Eu também prefiro não fazer isso com aliases ou funções para o ssh, se puder ser evitado. Eu acho que criar aliases e funções que substituem comandos e programas normais é uma solução um pouco frágil e arriscada: se um outro problema aparecer no futuro, para o qual a única solução é substituir ssh , então meu alias ou (mais provável) a função se torna ainda mais complexa e frágil. Cada vez mais, na terceira vez, etc., etc. pode ser a única solução. Além disso, para ser útil, a função teria que primeiro verificar se a chave já havia sido adicionada, caso contrário eu estaria adicionando-a toda vez que fizesse login, o que não resultaria em nada.

O ssh tem alguma configuração para fazer isso automaticamente? Existe alguma solução melhor do que adicionar ssh-add ~/.ssh/id_rsa_my_key ao meu .bash_profile ?

    
por iconoclast 30.08.2012 / 17:01

3 respostas

2

Em vez de ter ssh-agent gerar um nome de soquete aleatório, use a opção -a para fazer com que ele sempre use o mesmo nome. Exporte esse nome na variável de ambiente SSH_AUTH_SOCK . Quando você logar, execute

rm -f "$SSH_AUTH_SOCK"
ssh-agent -a "$SSH_AUTH_SOCK"

Dessa forma, todos os seus terminais se conectarão ao mesmo agente. Em seguida, inicie um terminal ao efetuar login que execute ssh-add e solicite sua senha, ou defina SSH_ASKPASS para win-ssh-askpass para que o próprio ssh solicite uma frase secreta.

    
por 31.08.2012 / 03:14
1

Claro, crie uma função de wrapper e coloque-a no seu .bashrc .

Algo parecido com isto:

ssh () {
  ssh-add -l | grep 'The agent has no identities.' 2>&1 > /dev/null && ssh-add
  /usr/bin/ssh "$@"
}

Embora desde que você esteja usando o Cygwin, você precisará do caminho correto para onde o ssh realmente estiver.

    
por 31.08.2012 / 01:45
1

Não adicione nada a nenhum dos scripts de inicialização do seu shell, isso é hackery desnecessário.

Em vez disso, adicione

AddKeysToAgent yes

para o seu .ssh / config

Assim, o ssh-add é executado automaticamente na primeira vez que você faz o ssh em outra caixa. Você só precisa inserir novamente sua chave quando ela expirar do agente ssh ou após a reinicialização.

    
por 30.10.2016 / 21:43