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 .