¿Cómo configuro SSH para no tener que escribir mi contraseña cuando me conecto a un host?
~/.ssh/config
que ahora se requiere PubkeyAcceptedKeyTypes ssh-rsa*,ssh-dss*
¿Cómo configuro SSH para no tener que escribir mi contraseña cuando me conecto a un host?
~/.ssh/config
que ahora se requiere PubkeyAcceptedKeyTypes ssh-rsa*,ssh-dss*
Respuestas:
Si utiliza GNOME, la aplicación de caballito de mar ("Contraseñas y claves de cifrado") puede hacerlo por usted: Archivo -> Nuevo -> Clave de shell segura .
Si prefiere terminal, ejecute para generar un par de claves. Los tipos de pares de claves válidos son:ssh-keygen -t <type>
El programa le pedirá una frase de contraseña y una ubicación donde guardar la nueva clave. Se recomienda usar la ruta predeterminada sugerida porque todas las demás herramientas la buscarán allí.
Una vez más, el caballito de mar a menudo puede hacer eso por usted: en Mis claves personales , haga clic con el botón derecho en su clave SSH y elija Configurar clave para un shell seguro .
O, ssh-copy-id -i ~/.ssh/id_rsa.pub remote-user@remote-host
en la terminal.
O, completamente manual paso a paso:
.ssh
en el directorio de inicio del usuario remoto en el host remoto.authorized_keys
(si aún no existe).umask
es más liberal que de costumbre, hacer que el archivo no se puede escribir en grupo: chmod go-w ~/.ssh ~/.ssh/authorized_keys
.~/.ssh/id_rsa.pub
) en el ~/.ssh/authorized_keys
archivo remoto .Si carga su clave privada en un agente ssh , mantendrá la clave descifrada en la memoria. Queremos que esto evite volver a ingresar la contraseña cada vez que ingresemos a un servidor.
Primero, el agente debe iniciarse o la ruta de un socket de comunicación lanzado debe cargarse en una variable. La ejecución de ssh-agent en un terminal generará comandos para asignar y configurar las variables del agente. Estos comandos se pueden guardar en un archivo para usar en un terminal diferente. Alternativamente, uno podría ejecutar estos comandos y olvidarse de reutilizar el mismo agente en otro terminal. por ejemplo: eval $(ssh-agent)
.
Cargar la clave es una simple cuestión de ejecutar ssh-add
y darle la frase de contraseña.
Si está utilizando GNOME, gnome-keyring-daemon generalmente proporciona la misma funcionalidad de agente SSH que ssh-agent, por lo que no debería necesitar iniciar nada. GNOME también cargará y desbloqueará automáticamente la clave al iniciar sesión.
Si todo se hizo correctamente, el uso no le pedirá una contraseña. Si algo está mal con el agente y no con la clave, se le pedirá que ingrese la frase de contraseña y no la contraseña de la cuenta de usuario.ssh user@server
Cualquier cosa que use ssh para la comunicación funcionará sin ingresar la contraseña de la cuenta de usuario cuando se carga la clave correcta en el agente. Programas como scp , sftp y rsync hacen uso de esto.
id_dsa
lugar de id_rsa
, y ECDSA lo tendrá id_ecdsa
.authorized_keys2
, pero es muy poco probable que encuentre algo más antiguo que 5.0 en uso.lsh
, ssh.com
y otros servidores SSH (Unix y no) no se incluyen en este tutorial.Copiando la clave pública a un host remoto:
ssh-copy-id -i ~ / .ssh / id_rsa.pub myaccount @ remotehost # this cat ~ / .ssh / id_rsa.pub | ssh myaccount @ remotehost \ 'mkdir -p ~ / .ssh; cat >> ~ / .ssh / Authorized_keys '# o esto
ssh-agent> ~ / .ssh / cross-terminal-agent . ~ / .ssh / cross-terminal-agent
ssh-copy-id
que copia la clave pública en el host de destino y establece los permisos automáticamente.
ssh-keygen -f ~/.ssh/id_rsa -N "";ssh-copy-id -i ~/.ssh/id_rsa username@server-ip-or-address
(solo reemplace username@server-ip-or-address
).
No especificó en qué Unix está, a qué Unix se está conectando, qué shell está usando, qué variante SSH está usando, etc. Por lo tanto, es posible que deba ajustar un poco esto; Esto se basa en versiones razonablemente recientes de OpenSSH, que se utiliza en muchas variantes de Unix.
Todo esto es de su sistema de escritorio local.
ssh-keygen
Asegúrese de utilizar el valor predeterminado para el nombre clave. Le sugiero que hagas establecer una contraseña de esa tecla, si no es un problema de seguridad. "-t rsa" no sería una mala idea, pero probablemente no sea necesario.
ssh-copy-id username@server
Eso le pedirá la contraseña que usaría para iniciar sesión, y configurará las cosas autorizadas_claves para usted. (no es necesario hacerlo a mano)
Luego esto:
`ssh-agent`
o tal vez esto:
exec ssh-agent sh
o:
exec ssh-agent bash
Eso iniciará un agente SSH que puede guardar su clave. En muchas variantes modernas de Unix, si ha iniciado sesión gráficamente, esto ya habrá tenido lugar. La primera variante (con los backticks) pone un ssh-agent en segundo plano y configura las variables de entorno para hablar con él. Los dos últimos hacen que el agente ejecute un shell para usted, de modo que cuando salga del shell, el agente salga.
Muchas variantes modernas de Unix ya tendrán un agente ejecutándose para usted, especialmente si inició sesión gráficamente. Puede intentar " ps aux | grep ssh-agent
" o " ps -ef | grep ssh-agent
"; Si algo ya se está ejecutando, úsalo.
Entonces finalmente:
ssh-add
Le pedirá una frase de contraseña; dale el que le diste a ssh-keygen. También hay formas de hacerlo preguntar gráficamente. Y puede poner el material ssh-agent y ssh-add en sus scripts de inicio de sesión (la configuración es diferente según el shell que use) para automatizar esto, pero algunas variantes de Unix (Ubuntu Linux actual, por ejemplo) hacen la mayor parte de eso automáticamente, por lo que que todo lo que realmente necesita hacer es crear una clave y usar ssh-copy-id para configurarla en el host remoto.
Ahora, " ssh username@server
" debería funcionar sin pedir ninguna autenticación. Detrás de escena, está usando una llave que tiene el agente ssh y le pide al agente que haga los trucos mágicos para firmarlo.
También es posible hacer esto en PuTTY en Windows.
Una vez que tenga el par de claves pública / privada todo configurado (como lo muestran otras respuestas aquí) ejecute PuttyGen. Allí, cargue la clave privada existente que ya configuró y luego guárdela como una clave privada PuTTY (ppk).
Luego, en PuTTY, simplemente haga clic en la sesión guardada en la que desea iniciar sesión automáticamente y haga clic en Cargar. Desde aquí, vaya a Conexión -> Datos en el panel izquierdo, y en "Nombre de usuario de inicio de sesión automático" escriba el nombre de usuario para ese servidor remoto:
Después de eso, vaya a Conexión -> SSH -> Auth, y busque el ppk que creó en PuttyGen:
Luego regrese a la página de sesión y guarde la sesión que cargó anteriormente.
A partir de una pregunta muy similar sobre ServerFault , recomendaría usar ssh-copy-id , que realiza todos los pasos necesarios para configurar las claves de autenticación para usted:
ssh-copy-id es un script que usa ssh para iniciar sesión en una máquina remota (presumiblemente usando una contraseña de inicio de sesión, por lo que la autenticación de contraseña debe estar habilitada, a menos que haya hecho un uso inteligente de múltiples identidades)
También cambia los permisos de inicio del usuario remoto, ~ / .ssh y ~ / .ssh / certified_keys para eliminar la capacidad de escritura del grupo (lo que de otro modo le impediría iniciar sesión, si el sshd remoto tiene StrictModes establecido en su configuración).
Si se da la opción -i, se utiliza el archivo de identidad (predeterminado en ~ / .ssh / identity.pub), independientemente de si hay claves en su agente ssh.
Todo lo que necesitas hacer es simplemente esto:
ssh-copy-id user@host
Escriba su contraseña una vez, ¡y listo!
Además de todo lo que ya se ha dicho sobre cómo configurar las claves ssh, recomiendo Keychain como una interfaz de consola ssh-agent que le permite manejar uno solo por proceso del sistema en lugar de por inicio de sesión.
Sé que ya hay herramientas de GNOME y KDE que hacen lo mismo, pero si eres el tipo de adicto a la consola, esto es genial (y se puede usar en la mayoría de los sistemas Unix).
Para usarlo, simplemente agregue lo siguiente a su ~/.bashrc
(similar para otros shells):
if type keychain >/dev/null 2>/dev/null; then
keychain --nogui -q <all your SSH/PGP keys>
[ -f ~/.keychain/${HOSTNAME}-sh ] && . ~/.keychain/${HOSTNAME}-sh
[ -f ~/.keychain/${HOSTNAME}-sh-gpg ] && . ~/.keychain/${HOSTNAME}-sh-gpg
fi
http://linuxproblem.org/art_9.html
Tu objetivo
Desea usar Linux y OpenSSH para automatizar sus tareas. Por lo tanto, necesita un inicio de sesión automático desde el host A / usuario a al host B / usuario b. No desea ingresar ninguna contraseña, porque desea llamar a ssh desde un script de shell.
Escribí este tutorial muy corto después de REALMENTE REALMENTE frustrado con tutoriales REALMENTE REALMENTE largos porque realmente es tan simple :)
test -f ~/.ssh/id_rsa.pub || ssh-keygen -t rsa #press enter twice if given prompts, then "ssh-add"
scp ~/.ssh/id_rsa.pub destID@destMachine:/tmp/ #type password
ssh destID@destMachine #type password
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
rm /tmp/id_rsa.pub
ssh-keygen
. (Si le indica que tiene que especificar un tipo, hágalo ssh-keygen -t rsa
). Cuando le solicite una ubicación de archivo, tome el valor predeterminado. Cuando le pida una frase de contraseña, presione enter para que no haya frase de contraseña.cat ~/.ssh/id_rsa.pub
(o cualquiera que sea la ubicación predeterminada del archivo ssh-keygen
, aunque tendría que tener una instalación realmente antigua ssh
para que sea diferente); copia la salida a tu portapapeles.~/.ssh/authorized_keys
(si ~/.ssh
no existe, slogin
en algún lugar; esta es la manera simple y fácil de crearlo con los permisos adecuados). Pegue su portapapeles (que contiene el id_rsa.pub
del otro host) en este archivo.Si quieres hacerlo todo en la terminal en Linux:
En el anfitrión
cd ~ / .ssh /
ssh-keygen -t {rsa | dsa} -b {1024 | 2048 | 4096} -C "algún texto de comentario si lo desea" -f id_ArbitraryName
Los elementos en {} son opciones, use rsa o dsa y elija el tamaño de bit (más grande es más seguro)
Luego, debe agregar los permisos a los archivos autorizado_claves y autorizado_claves2.
id_Arbitrario.pub cat. >> claves_autorizadas
id_AribtraryName.pub de gato >> claves_autorizadas2
Luego, descargue el archivo id_AribtraryName en el cuadro desde el que desea ssh. Si la caja de conexión está basada en Unix, puede ser necesario un archivo de configuración (en la masilla, alguien más arriba lo cubrió).
En la caja de conexión
En su archivo de configuración - vim ~ / .ssh / config
Host example.host.com # o el nombre de su computadora
Nombre de usuario
IdentityFile ~ / .ssh / id_ArbitraryName
El archivo de configuración necesita permisos de 600. La carpeta SSh necesita 700.
Espero que ayude si te encuentras con el problema de configuración que se omite mucho.