Estou tentando criar um script de shell que, entre outras coisas, inicia o ssh-agent e adiciona uma chave privada ao agente. Exemplo:
#!/bin/bash
# ...
ssh-agent $SHELL
ssh-add /path/to/key
# ...
O problema com isso é que o ssh-agent aparentemente inicia outra instância do $ SHELL (no meu caso, bash) e, da perspectiva do script, ele executa tudo e o ssh-add e qualquer coisa abaixo dele nunca é executada.
Como posso executar o ssh-agent no meu script de shell e mantê-lo na lista de comandos?
exit
o truque.Coloque o seguinte na parte superior do seu script:
Seu script deve ficar assim:
Explicação
Os backticks
ssh-agent
coletam sua produção.eval
coleta essa saída, concatena-a em um único comando e, em seguida, executa o comando. Em seguida, você pode usarssh-add
para fornecer suas principais credenciais.fonte
eval $(ssh-agent)
bash -i
no final do script.Costumo fazer algo assim em scripts que exigem um agente.
Basicamente, a primeira coisa que o script faz é verificar se um agente está em execução. Se não for exec, é usado para iniciar um novo processo no lugar do script. O agente é iniciado, as chaves são adicionadas e, finalmente, o script é chamado novamente (consulte o
$0
).fonte
.. "ssh-add ; $0 $*"
ou.. "ssh-add ; $0 $@"
, em vez disso, o que pode funcionar. O que não seria perfeito, mas certamente funcionaria em muitos casos. A melhor solução é quase sempre fazer com que seu agente seja executado antes de mais nada, isso é apenas algo que pode ser útil em casos obscuros.Eu achei que isso funciona para mim.
Crio o processo ssh-agent, adiciono a chave, faço o que preciso e depois o mato. Não é necessário verificar se está funcionando mais tarde.
fonte
É melhor usar chaveiro neste caso
Debian / Ubuntu:
RHEL / Fedora / CentOS
Adicione no seu .bashrc o seguinte:
fonte
Descobri que com a solução do Zoredache, a chave estaria disponível para qualquer shell que compartilhe o mesmo agente ssh que o shell que chamou o script. Eu queria evitar isso em um script que exigisse acesso root a uma máquina remota, por razões óbvias de segurança.
Eu descobri que colocar o seguinte shebang na parte superior do script funciona:
fonte
Eu tentei muito e a solução que finalmente funcionou foi substituir minha senha por uma string vazia.
fonte