Tengo un sitio como un repositorio Git remoto desde Bitbucket.com usando un alias SSH. Puedo iniciar manualmente el agente ssh en mi servidor, pero tengo que hacerlo cada vez que inicio sesión a través de SSH.
Inicio manualmente el agente ssh:
eval ssh-agent $SHELL
Luego agrego el agente:
ssh-add ~/.ssh/bitbucket_id
Luego aparece cuando hago:
ssh-add -l
Y estoy listo para irme. ¿Hay alguna forma de automatizar este proceso para que no tenga que hacerlo cada vez que inicio sesión? El servidor ejecuta RedHat 6.2 (Santiago).
ssh-agent <command>
se ejecuta<command>
como un subproceso dessh-agent
, por lo que está comenzando un nuevo shell. Creo que quiereseval ssh-agent
..bash_profile
es específico de bash,.profile
es genérico para todos los shells POSIX.bash
buscará primero.bash_profile
, y luego por defecto a.profile
.ssh-agent
un shell "estándar" (compatible con POSIX) eseval $(ssh-agent -s)
. Tenga en cuenta también que usted tiene que asegurarse de que correctamente deshacerse del agente al cerrar la sesión, por lo que también es recomendable ponertrap 'kill $SSH_AGENT_PID' EXIT
en su.profile
después de la línea que se inicia el agente.Respuestas:
Por favor, lea este artículo. Puede encontrar esto muy útil:
http://mah.everybody.org/docs/ssh
En caso de que el enlace anterior desaparezca algún día, estoy capturando la pieza principal de la solución a continuación:
fuente
.bash_profile
usandosource ~/.bash_profile
su sesión de shell actual. El reinicio de la máquina también funcionará porque eso cargará la nueva configuración de todos modos.SSH_ENV="$HOME/.ssh/env"
(es decir, no / entorno) ¿Por qué? sshd usa ~ / .ssh / environment (consulte la página de manual: PermitUserEnvironment). Github también recomienda esto en su solución - help.github.com/articles/…ssh-agent
comando de inicio en .bashrc hará que elscp
comando no funcione.En Arch Linux, lo siguiente funciona realmente bien (debería funcionar en todas las distribuciones basadas en systemd):
Cree un servicio de usuario systemd, poniendo lo siguiente para
~/.config/systemd/user/ssh-agent.service
:Configure el shell para tener una variable de entorno para el socket (
.bash_profile, .zshrc, ...
):Habilite el servicio para que se inicie automáticamente al iniciar sesión e inícielo:
Agregue la siguiente configuración a su archivo de configuración ssh local
~/.ssh/config
(esto funciona desde SSH 7.2):Esto le indicará al cliente ssh que siempre agregue la clave a un agente en ejecución, por lo que no es necesario agregar ssh de antemano.
fuente
ssh-agent
proceso individual . Tal vez me falta conocimiento incluso después de leer los documentos.SSH_AGENT_PID
embargo, esto no establecerá la variable de entorno :(Antigua pregunta, pero me encontré con una situación similar. No piense que la respuesta anterior logra completamente lo que se necesita. La pieza que falta es
keychain
; instálalo si aún no lo está.Luego agregue la siguiente línea a su
~/.bashrc
Esto iniciará
ssh-agent
si no se está ejecutando, conéctese a él si es así, cargue lasssh-agent
variables de entorno en su shell y cargue su clave ssh.Cambie
id_rsa
a la clave privada~/.ssh
que desee cargar.Referencia
/unix/90853/how-can-i-run-ssh-add-automatically-without-password-prompt
fuente
keychain --eval id_[yourid file]
a .bashrceval `keychain --eval id_[yourid file]`
a.bashrc
. Los backticks necesarios para evaluar las variables de entorno al shell actual para acceder al agente ssh en ejecución.-q
opción para el modo silencioso. Más información sobre Keychain: funtoo.org/KeychainLa solución aceptada tiene los siguientes inconvenientes:
Si sus claves no requieren escribir contraseña, le sugiero la siguiente solución. Agregue lo siguiente a su
.bash_profile
final (edite la lista de claves según sus necesidades):Tiene las siguientes ventajas:
Tiene posibles desventajas:
ssh-add
comando interactivo influirá solo en una sesión, que de hecho es un problema solo en circunstancias muy atípicas;Tenga en cuenta que varios
ssh-agent
procesos no son una desventaja, ya que no requieren más memoria o tiempo de CPU.fuente
Agregue esto a su
~/.bashrc
, luego cierre sesión y vuelva a entrar para que surta efecto.Esto solo debe solicitar una contraseña la primera vez que inicie sesión después de cada reinicio. Continuará reutilizando lo mismo
ssh-agent
mientras siga ejecutándose.fuente
~/.ssh/id_rsa
? Parece que lassh-add
parte de su respuesta espera nombres de archivo predeterminados para las claves.Así que solía usar los enfoques descritos anteriormente, pero prefiero que el agente muera cuando termine mi última sesión de bash. Esto es un poco más largo que las otras soluciones, pero es mi enfoque preferido. La idea básica es que la primera sesión de bash inicia el agente ssh. Luego, cada sesión bash adicional busca el archivo de configuración (
~/.ssh/.agent_env
). Si eso está allí y hay una sesión ejecutándose, obtenga el entorno y cree un enlace rígido al archivo socket/tmp
(debe estar en el mismo sistema de archivos que el archivo socket original). A medida que las sesiones de bash se cierran, cada una elimina su propio enlace rígido. La última sesión para cerrar encontrará que los enlaces duros tienen 2 enlaces (el enlace duro y el original), la eliminación del propio socket del proceso y la eliminación del proceso dará como resultado 0, dejando un entorno limpio después del cierre de la última sesión de bash.fuente
Solo para agregar otra solución: P, fui con una combinación de las soluciones de @spheenik y @ collin-anderson.
Podría ser un poco más elegante, pero es simple y legible. Esta solución:
AddKeysToAgent yes
está en su configuración ssh, por lo que las claves se agregarán automáticamente al usarlasComentarios bienvenidos :)
fuente
AddKeysToAgent yes
entorno. Gracias.Lo resolví agregando esto al / etc / profile - en todo el sistema (o al usuario local .profile , o _.bash_profile_):
Esto inicia un nuevo ssh-agent si no se está ejecutando para el usuario actual, o restablece el parámetro ssh-agent env si se está ejecutando.
fuente
if pgrep -u $WHOAMI $SERVICE >/dev/null
trabajo?Los usuarios de la concha de pescado pueden usar este script para hacer lo mismo.
fuente
Yo uso la herramienta ssh-ident para esto.
Desde su página de manual :
fuente
Intenté un par de soluciones de muchas fuentes, pero todas parecían demasiados problemas. Finalmente encontré el más fácil :)
Si aún no está familiarizado con zsh y oh-my-zsh , instálelo. Lo amarás :)
Luego edite
.zshrc
encuentre la
plugins
sección y actualícela para usarlassh-agent
así:¡Y eso es todo! Tendrá
ssh-agent
en funcionamiento cada vez que inicie su shellfuente
Me gustan mucho tus respuestas.
cygwin / linux
Facilitó mucho el trabajo desde los hosts. Combiné las funciones de inicio y fin para hacerlo seguro.fuente