GNU/Linux >> Tutoriales Linux >  >> Linux

Un poco de magia de copia de archivos SSH en la línea de comando

Los administradores de sistemas Linux usan SSH diariamente para conectarse de un sistema a otro. La razón es que es el protocolo de facto para conectarse de forma segura a los sistemas Linux. Es seguro porque todo el tráfico entre los sistemas está encriptado, incluido el intercambio de inicio de sesión inicial. Lo único para lo que los administradores de sistemas usamos Telnet en estos días es para probar una conexión remota a un servidor web o a algún puerto remoto. Está bien, lo admito, he sido conocido por piratear uno o dos servidores de correo electrónico usando Telnet, pero esa es una historia para otro momento. estoy divagando También puede usar comandos relacionados con SSH para transferir archivos entre hosts usando SFTP o SCP, ya sea a un sistema remoto o desde un sistema remoto. Pero estoy a punto de mostrarte un genial truco mágico de SSH que impresionará a tus amigos y posiblemente incluso dejará perplejos a Penn y Teller sobre cómo lo hiciste.

Nota: Este procedimiento implica el intercambio de claves SSH entre hosts y el resultado es que ya no tiene que emitir una contraseña para realizar la conexión.

Requisito previo:generación de clave SSH

Antes de que pueda realizar esta maravilla mágica, debe preparar sus sistemas para usar claves SSH entre ellos. En realidad, este paso es opcional, pero para facilitarte la vida, te recomiendo que lo realices.

En aras de la simplicidad en este ejemplo, tenemos tres sistemas:host1, host2 y host3 que usan las direcciones IP 10.10.1.50, 10.10.1.60 y 10.10.1.70, respectivamente. La siguiente tabla podría ser una forma más clara de presentar este escenario.

Inicie sesión en host1 y emita el siguiente comando para generar la clave SSH.

[host1] $ ssh-keygen

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): <ENTER>
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): <ENTER>
Enter same passphrase again: <ENTER>
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:XWk+zJ5Kphe/sT78yg1jLdQCybN4dE2o52eOihEuwPo root@rhel8
The key's randomart image is:
+---[RSA 2048]----+
|             ..  |
|         . ..+   |
|          *.= .  |
|   .     +.@..   |
|    o   S +oB .  |
|   . . . o.o.=o  |
|  .   . o o+O=.  |
|   .   . *.+=B.  |
|    E   o.oo*=o  |
+----[SHA256]-----+

Acepte los valores predeterminados presionando la tecla ENTER tres veces para continuar como se muestra arriba. Coloqué el texto en la captura de pantalla. No verá esas entradas en la ventana de su terminal. Ha generado la clave SSH para este host. Repita este proceso en host2 y en host3.

Copiar claves

Este paso se debe realizar en todos los hosts en ambas direcciones para que las transferencias de archivos y otras conexiones de tipo SSH puedan realizarse sin las restricciones de las solicitudes de contraseña. Este es el método más fácil para intercambiar claves entre hosts.

Emita los siguientes comandos de host1 a host2 (10.10.1.60)

[host1] $ ssh-copy-id khess@host2
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/khess/.ssh/id_rsa.pub"
The authenticity of host 'host2 (10.10.1.60)' can't be established.
ECDSA key fingerprint is SHA256:fM/5eaHGa37W+0xq4QZfL+Y6NobRbCVH1G4uhQLAwMw.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
khess@host2's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'khess@host2'"
and check to make sure that only the key(s) you wanted were added.

Y ahora emita el mismo comando de host1 a host3 (10.10.1.70)

[host1] $ ssh-copy-id khess@host3
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/khess/.ssh/id_rsa.pub"
The authenticity of host 'host3 (10.10.1.70)' can't be established.
RSA key fingerprint is SHA256:Y0X9C7rVNiRgM4yuBH8DUOUed5d/N57VYO+aoRmXmP4.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
khess@host3's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'khess@host3'"
and check to make sure that only the key(s) you wanted were added.

Ahora, cualquier transacción de tipo SSH no tendrá contraseña de host1 a host2 y de host1 a host3.

Repita este proceso para los hosts 2 y 3.

[host2] $ ssh-copy-id khess@host1

[host2] $ ssh-copy-id khess@host3

[host3] $ ssh-copy-id khess@host1

[host3] $ ssh-copy-id khess@host2

Esto copia las claves entre todos los hosts para que ahora cualquier transacción de tipo SSH hacia o desde cualquier host no tenga contraseña. Prueba el tuyo para demostrártelo a ti mismo.

Haz que la normalidad suceda

Para fines de prueba, cree un nuevo archivo en cada sistema en su directorio de inicio como , de modo que en un host1 tenga host1.txt, en host2 tenga host2.txt y en host3 tenga host3.txt.

Como ejercicio preliminar, no mágico, inicie sesión en host1 y copie el archivo host1.txt en host2 y host3. Debe especificar la ruta completa al archivo de destino.

[host1] $ scp host1.txt khess@host2:/home/khess/host1.txt

host1.txt                                                                        100%   0   0.0KB/s   00:00

[host1] $ scp host1.txt khess@host3:/home/khess/host1.txt

host1.txt                                                                        100%   0   0.0KB/s   00:00

Los archivos están vacíos y, por lo tanto, verá que el tamaño es 0 y la tasa de transferencia es de 0,0 KB/s. Estos números serían diferentes si el archivo tuviera algún tamaño. Este ejercicio se ve exactamente igual si inicia sesión en host2 o host3 y copia los archivos locales en los otros sistemas remotos. Esto no es particularmente interesante o mágico.

Magia:La copia

Entonces, para mi último truco de copia de archivos, la verdadera magia de copiar un archivo de un host a otro sin iniciar sesión en ninguno de ellos desde un tercer host. Se ve así:

Inicie una sesión SCP desde el host1 que copia el archivo host2.txt del host2 al host3. Veamos cómo se ve eso en la línea de comando. Debe especificar la ruta exacta tanto en el sistema de origen como en el sistema de destino.

[host1] $ scp khess@host2:/home/khess/host2.txt khess@host3:/home/khess/host2.txt

host2.txt                                                                 100%    0     0.0KB/s   00:00  

El archivo host2.txt se copia de host2 a host3 sin iniciar sesión. Magia.

En general, este comando se parece a:

[hostX] $ scp user@source_host:/path/to/file user@target_host:/path/to/file

Puede cambiar el nombre del archivo de destino durante la copia. ¿Ve alguna posibilidad de secuencias de comandos automatizadas usando este truco mágico?

Y aquí es donde exclamas:"¡Guau, eso es mágico!"

Conclusión

SSH, como puede ver, no es solo una cosa. Es un protocolo seguro que se usa para interactuar con una computadora, copiar archivos y proteger otros tipos de comunicaciones, como en el "servicio X a través de SSH". Este artículo le mostró cómo configurar claves SSH para que no tenga que escribir una contraseña para iniciar sesión en un sistema remoto, copiar archivos a un sistema remoto o copiar archivos entre dos sistemas remotos. La configuración de claves SSH entre sistemas significa que puede automatizar fácilmente tareas como la manipulación de archivos sin almacenar una contraseña en un archivo. Y usar SSH/SCP de esta manera no es realmente mágico, pero probablemente ya lo sabías.


Linux
  1. ¿Manipulación de teclas X y punteros en la línea de comandos?

  2. 4 herramientas para descargar cualquier archivo usando la línea de comandos en Linux

  3. Cómo usar el comando ssh-keygen para configurar ssh sin contraseña

  4. Importación de PostgreSQL CSV desde la línea de comando

  5. ¿Cómo borrar el contenido de un archivo desde la línea de comando?

Copie un archivo a varios directorios desde la línea de comandos en Linux

Ver el contenido de un archivo en la línea de comandos de Linux

Uso de Google Drive desde la línea de comandos de Linux

5 comandos para ver el contenido de un archivo en la línea de comandos de Linux

¿Cómo imprimir la última línea de un archivo comprimido gz en la línea de comando?

SSH:cómo incluir el comando -t en el archivo ~/.ssh/config

    host1 host2 host3
    10.10.1.50 10.10.1.60 10.10.1.70