Estoy tratando de crear un script de shell que, entre otras cosas, inicie ssh-agent y agregue una clave privada al agente. Ejemplo:
#!/bin/bash
# ...
ssh-agent $SHELL
ssh-add /path/to/key
# ...
El problema con esto es que ssh-agent aparentemente inicia otra instancia de $ SHELL (en mi caso, bash) y desde la perspectiva del script se ejecuta todo y ssh-add y todo lo que está debajo nunca se ejecuta.
¿Cómo puedo ejecutar ssh-agent desde mi script de shell y mantenerlo en movimiento en la lista de comandos?
exit
hizo el truco.Ponga lo siguiente en la parte superior de su script:
Su script debería verse así:
Explicación
Los backticks alrededor
ssh-agent
recogen su salida.eval
recopila esa salida, la concatena en un solo comando y luego ejecuta el comando. Luego puede usarssh-add
para proporcionar sus credenciales clave.fuente
eval $(ssh-agent)
bash -i
al final del guión.Tiendo a hacer algo como esto en los scripts que requieren un agente.
Básicamente, lo primero que comprueba el script para ver si se está ejecutando un agente. Si no es exec, se utiliza para iniciar un nuevo proceso en lugar del script. Se inicia el agente, se agregan claves y, finalmente, se vuelve a llamar al script (consulte el
$0
).fuente
.. "ssh-add ; $0 $*"
, o en su.. "ssh-add ; $0 $@"
lugar, lo que puede funcionar. Lo cual no sería perfecto, pero ciertamente funcionaría en muchos casos. La mejor solución es casi siempre hacer que su agente se ejecute antes que cualquier otra cosa, esto es algo que podría ser útil en casos oscuros.Encontré que esto funciona para mí.
Creo el proceso ssh-agent, agrego la clave, hago lo que tengo que hacer y luego lo mato. No es necesario verificar si se está ejecutando más tarde.
fuente
Es mejor usar llavero en este caso
Debian / Ubuntu:
RHEL / Fedora / CentOS
Agregue en su .bashrc lo siguiente:
fuente
Descubrí que con la solución de Zoredache, la clave estaría disponible para cualquier shell que comparta el mismo agente ssh que el shell que llamó al script. Quería evitar esto en un script que requería acceso de root a una máquina remota, por razones obvias de seguridad.
He encontrado que poner el siguiente shebang en la parte superior del script funciona:
fuente
Lo intenté y la solución que finalmente funcionó fue reemplazar mi frase de contraseña con una cadena vacía.
fuente