¿Cómo ssh al servidor remoto usando una clave privada?

77

Tengo dos servidores Ambos servidores están en CentOS 5.6. Quiero SSH del Servidor 1 al Servidor 2 usando una clave privada que tengo (OpenSSH SSH-2 Private Key).

No sé cómo hacerlo sobre Unix. Pero lo que hice en Windows usando Putty fue alimentar mi clave privada OpenSSH a putty-gen y generar una clave privada en formato PPK.

Sin embargo, estaría creando un script bash desde el servidor 1 que ejecutará algunos comandos en el servidor 2 a través de SSH.

¿Cómo hago SSH al servidor 2 usando mi archivo de clave privada del servidor 1?

Aivan Monceller
fuente
1
En muchos sistemas Linux y Unix, esto se puede hacer usandossh-copy-id user@machine
Paul Tomblin

Respuestas:

66

Necesita su clave pública SSH y necesitará su clave privada ssh. Las claves se pueden generar con ssh_keygen. La clave privada debe mantenerse en el Servidor 1 y la clave pública debe almacenarse en el Servidor 2.

Esto se describe completamente en la página de manual de openssh, por lo que citaré mucho. Debería leer la sección 'Autenticación'. También el manual de openSSH debería ser realmente útil: http://www.openssh.org/manual.html

Tenga cuidado con ssh porque esto afecta la seguridad de su servidor.

De man ssh:

 ~/.ssh/identity
 ~/.ssh/id_dsa
 ~/.ssh/id_rsa
     Contains the private key for authentication.  These files contain
     sensitive data and should be readable by the user but not acces-
     sible by others (read/write/execute).  ssh will simply ignore a
     private key file if it is accessible by others.  It is possible
     to specify a passphrase when generating the key which will be
     used to encrypt the sensitive part of this file using 3DES.

 ~/.ssh/identity.pub
 ~/.ssh/id_dsa.pub
 ~/.ssh/id_rsa.pub
     Contains the public key for authentication.  These files are not
     sensitive and can (but need not) be readable by anyone.

Esto significa que puede almacenar su clave privada en su directorio de inicio en .ssh. Otra posibilidad es decirle a ssh mediante el -icambio de parámetro que use un archivo de identidad especial. También de man ssh:

 -i identity_file
     Selects a file from which the identity (private key) for RSA or
     DSA authentication is read.  The default is ~/.ssh/identity for
     protocol version 1, and ~/.ssh/id_rsa and ~/.ssh/id_dsa for pro-
     tocol version 2.  Identity files may also be specified on a per-
     host basis in the configuration file.  It is possible to have
     multiple -i options (and multiple identities specified in config-
     uration files).

Esto es para la clave privada. Ahora debe introducir su clave pública en el Servidor 2. Nuevamente, una cita de man ssh:

  ~/.ssh/authorized_keys
         Lists the public keys (RSA/DSA) that can be used for logging in
         as this user.  The format of this file is described in the
         sshd(8) manual page.  This file is not highly sensitive, but the
         recommended permissions are read/write for the user, and not
         accessible by others.

La forma más fácil de lograr eso es copiar el archivo al Servidor 2 y agregarlo al archivo autorizado_claves:

scp -p your_pub_key.pub user@host:
ssh user@host
host$ cat id_dsa.pub >> ~/.ssh/authorized_keys

Se debe permitir la autorización mediante clave pública para el demonio ssh, ver man ssh_config. Por lo general, esto se puede hacer agregando la siguiente declaración al archivo de configuración:

PubkeyAuthentication yes
echox
fuente
10
Hola, gracias por el esfuerzo, pero solo necesito esto. ssh -i keyfile¡Gracias!
Aivan Monceller
8
Después de generar la clave, la forma más fácil y recomendada para instalarlo en el servidor es con ssh-copy-id: ssh-copy-id -i ~/.ssh/foo.id_rsa remote.example.com.
Gilles
55
Es interesante cómo todo el mundo se olvida de mencionar que necesita ejecutar ssh-adddespués de crear una clave en la computadora desde la que se está conectando. eso es lo que causa dolor de cabeza a la mayoría de las personas.
Luka
3
NOTA IMPORTANTE: El cliente puede tener muchas claves privadas y seleccionar basándose en un nombre arbitrario en su archivo privado ~ / .ssh / config donde Host = da el nombre arbitrario, HostName da un nombre o una dirección IP, Port = el puerto de destino, El usuario es el nombre de usuario de destino e ItentityFile = apunta al archivo de clave privada. Este conjunto de características a menudo se pasa por alto y es LA solución a muchos problemas de configuración, como tener múltiples pares de claves que de otro modo colisionarían en el espacio de nombres.
Richard T
1
Cuando intento conectarme con SSH $ ssh -i ~/.ssh/id_rsa [email protected], obtengo el error. [email protected]: Permission denied (publickey).Tengo la clave creada, agregada localmente ssh-addy agregada como clave autorizada en el servidor remoto.
Aaron Franke
21

Usé ssh con la opción -i para agregar su clave aquí.

Si desea pasar arg1, arg2 con el archivo .sh, simplemente páselo después del archivo .sh y use un espacio de uso para separarlo.

ssh -i home/avr/new.pem [email protected] "/var/www/beta/betatolive.sh mmin 30"

Avinash Raut
fuente
1
No se olvide de establecer los permisos correctos:chmod 600 home/avr/new.pem
Brian Haak
16

Lo primero que deberá hacer es asegurarse de haber ejecutado el comando keygen para generar las claves:

ssh-keygen -t rsa

Luego use este comando para empujar la llave al servidor remoto, modificándola para que coincida con el nombre de su servidor.

cat ~/.ssh/id_rsa.pub | ssh user@hostname 'cat >> .ssh/authorized_keys'
Anubhav Singh
fuente
66
llamemos en su ssh-copy-id user@hostnamelugar
andrej
7

Agregue la clave pública ( id_[rd]sa.pub) para su máquina de origen (desde donde está enviando ssh) al ~/.ssh/authorized_keysarchivo del servidor de destino para el nombre de usuario en el que desea ssh. Si ha perdido la clave pública, querrá crear una nueva con ssh-keygen. Usar los argumentos predeterminados para eso debería estar bien para la mayoría de los propósitos. Si necesita instrucciones más detalladas, hay miles de tutoriales que puede buscar en Google.

Kevin
fuente
4

ssh-copy-id: use claves disponibles localmente para autorizar inicios de sesión en una máquina remota

Úselo ssh-copy-iden el Servidor 1, suponiendo que tenga el par de claves (generado con ssh-keygen):

ssh-copy-id -i ~/.ssh/id_rsa user@server2_hostname

Ahora debería poder ssh en el Servidor 2 con ssh usando la clave privada

ssh -i ~/.ssh/id_rsa user@server2_hostname

De hecho, si verifica cat ~/.ssh/authorized_keysen el Servidor 2, verá que la clave pública se adjunta para usted.

Sida Zhou
fuente