Como adicionar automaticamente keyfile e passphrase ao ssh-agent?

1

Linux 4.4.0-34-genérico # 53-Ubuntu SMP Qua Jul 27 16:06:39 UTC 2016 x86_64 x86_64 x86_64 GNU / Linux

Eu uso o script para iniciar o ssh-agent e iniciar outro script (que está usando espera para enviar a senha para o agente).

#!/bin/bash
eval 'ssh-agent -s'
/root/script2

/ root / script2:

#!/usr/bin/expect -f
spawn ssh-add /root/.ssh/key
expect "Enter passphrase for /root/.ssh/key:"
send "passphrase\n";
interact

Todos os scripts são + x A frase de acesso é válida 100%

Depois de começar o primeiro script, recebo:

Agent pid 3985
spawn ssh-add /root/.ssh/key
Enter passphrase for /root/.ssh/key:
Identity added: /root/.ssh/key (/root/.ssh/key)

Como você vê, agente iniciado e Identidade adicionada MAS quando eu tento " ssh-add -l " eu recebo:

Error connecting to agent: No such file or directory

Mas o processo ainda está trabalhando com o 3985 PID. Por que isso me diz Identidade adicionada , mas ssh-add -l não funcionou? : (

Ok, eu tento avaliar manualmente o ssh-agent e adicionar o arquivo de chave:

root@:~# eval 'ssh-agent -s'
Agent pid 4063
root@:~# ssh-add -l
The agent has no identities.
root@:~# ssh-add /root/.ssh/key
Enter passphrase for /root/.ssh/key:
Identity added: /root/.ssh/key (/root/.ssh/key)
root@:~# ssh-add -l
4096 SHA256:FxPiCFYOiRree0ogNPpo81DTDUqmr1Brlo0LFnFK12o /root/.ssh/key (RSA)

Por que funciona quando tento executá-lo manualmente? Como consertar isso? Eu quero adicionar isso ao rc.local para iniciar automaticamente quando o PC for iniciado.

UPD Se eu tentar executar apenas o script2 manualmente, ele funcionará (adiciona chaves ao agente). Então, eu acho que o problema é com o sh-agent eval, mas eu não sei o que está errado

    
por Родинка 21.08.2016 / 23:23

1 resposta

4

Primeiro, vamos tirar isso do caminho: sob nenhuma circunstância você deve usar expect ou algo parecido para alimentar uma senha em ssh-add . Como você armazenou a senha em texto sem formatação no disco, é melhor ter apenas uma chave sem frase-senha. Você pode adicionar essa chave a um agente automaticamente sem usar hacks como expect .

Naturalmente, use somente uma chave sem senha para automação que precise acionar ações específicas por SSH e restringir severamente as ações que essa chave pode chamar usando comandos forçados por SSH.

Agora, como a razão pela qual sua solução não funciona:

#!/bin/bash
eval 'ssh-agent -s'
/root/script2

Esse script (que não tem bash-isms, portanto, você pode ter usado #!/bin/sh , que é mais portátil) inicia um agente e salva seus detalhes em seu ambiente e, em seguida, executa seu outro script e sai . Quando o script deixa de ser executado, o mesmo acontece com as variáveis de ambiente nas quais você salvou os detalhes do agente.

Você precisa executar

eval 'ssh-agent -s'

no shell em que você deseja salvar (e reutilizar) os detalhes da conexão do agente.

De qualquer forma, como sua chave é sem senha, você realmente precisa de um agente? É menos complicado de fazer:

ssh -i ~/place/where/the/key/lives -l username server restricted-command

Para que o cliente ssh leia a chave diretamente em vez de usar um agente.

Finalmente, parece que você pode estar fazendo tudo isso como root. A menos que haja uma boa razão para isso, faça tudo isso funcionar em uma conta de função sem privilégios .

    
por 21.08.2016 / 23:40