Cómo usar el comando scp (Copia segura) para transferir archivos

Este tutorial explica cómo usar el comando scp (Secure Copy) para transferir archivos entre computadoras.

El comando scp está disponible en todos los sistemas Linux, Unix y Windows. Su implementación probablemente mejorará y facilitará la experiencia de trabajo en red.

La seguridad la proporciona el protocolo ssh .

Este comando nos permite transferir archivos de forma fiable y segura de un ordenador a otro. Junto con el comando sftp , también protegido por el protocolo ssh, scp es una de las técnicas de transferencia de archivos más seguras.

Después de leer este artículo, el lector podrá compartir y obtener archivos fácilmente con comandos únicos.

Todos los ejemplos prácticos de este tutorial contienen capturas de pantalla, lo que facilita que todos los usuarios de Linux comprendan cómo se aplican los comandos.

Requisitos antes de usar scp

El usuario descargará o cargará archivos, debe tener el servicio ssh ejecutándose.

Si el servicio ya se está ejecutando en el servidor, puede pasar a la siguiente sección de este artículo .

Si el servicio no se está ejecutando, el usuario puede instalarlo siguiendo las instrucciones a continuación para las distribuciones de Linux basadas en Debian y RedHat.

En sistemas basados ​​en Debian como Ubuntu, el servicio ssh se puede instalar con el administrador de paquetes apt como se muestra en la imagen a continuación.

sudo apt instalar ssh

En sistemas basados ​​en RedHat como CentOS, el servicio ssh se puede instalar ejecutando el siguiente comando:

dnf instalar abre el servidor sh

Cuando finalice la instalación, en el servidor al que desea conectarse, inicie el servicio con el comando systemctl como se muestra a continuación (sistemas basados ​​en Debian).

sudo systemctl iniciar ssh

Para iniciar el servicio ssh en los sistemas RedHat, ejecute:

sudo systemctl iniciar sshd

Cómo descargar archivos y directorios con scp (Copia segura)

En el primer ejemplo práctico de este tutorial, un usuario descarga un archivo llamado < archivo1 > a su directorio de inicio.

Es importante recordar que descargar o cargar archivos requiere las credenciales de un usuario existente en la computadora remota.

La sintaxis para descargar un archivo con scp es la siguiente, donde < Usuario remoto > es un usuario existente en la computadora remota desde la que el usuario desea descargar archivos. < Server-IP > es el host o dirección IP del servidor que almacena el archivo, < Path/To/File > es la ruta al archivo para descargar y < Local-Director y> es el directorio local de la computadora del usuario donde se encuentra el archivo. salvado.

scp < Usuario remoto >@< IP del servidor > : < Ruta / Para / Archivo > < Directorio local >

En el siguiente ejemplo, el usuario local linux-hint3 inicia sesión como usuario remoto de linuxhint en el servidor con la dirección IP 192.168.0.103 y descarga un archivo llamado < archivo1 > a su directorio de inicio. Una ejecución del comando posterior a ls muestra que el archivo 1 está presente localmente.

Scp linuxhint @ 192.168.0.103:archivo1 ~ /

De forma predeterminada, después de iniciar sesión, el directorio de trabajo remoto actual es el directorio de inicio del usuario remoto.

El indicador -O es útil para ejecutar el legado de SCP necesario para transferir archivos con sistemas que no implementaron el protocolo sftp.

scp -O linuxhint @ 192.168.0.103:archivo1 ~ /

En el siguiente ejemplo, el usuario descarga un archivo llamado newfile2 , almacenado en el subdirectorio Escritorio/ . El destino local del archivo es el directorio local actual representado por un punto.

scp   linuxhint @ 192.168.0.103:Escritorio/nuevoarchivo2 . _

La descarga de directorios solo requiere agregar el indicador -r (recursivo) como se muestra en la captura de pantalla a continuación.

En el siguiente ejemplo, el usuario descarga el directorio remoto llamado testdir/ al subdirectorio local llamado directory/ .

scp -r linuxhint @ 192.168.0.103:testdir ~ / directorio

El flag -l permite limitar la transferencia de descarga en Kb/s para controlar el ancho de banda.

En la siguiente captura de pantalla, el usuario limita el ancho de banda para la transferencia a 100 Kb/ps. Como puede ver, el usuario usó un comodín (*) para descargar todos los archivos cuyo nombre comienza con » ubuntu «.

scp -l 100   linuxhint @ 192.168.0.103:ubuntu * ~ /

Si el usuario quiere acelerar la transferencia de archivos, puede agregar la -C para comprimir archivos o directorios durante la transferencia, dejando la copia de destino sin comprimir (si la fuente lo estaba).

En el ejemplo a continuación, el usuario implementa el indicador -C (Comprimir) para descargar todos los archivos que comienzan con » ubuntu » al subdirectorio Desktop/ local.

scp -C linuxhint @ 192.168.0.103:ubuntu * / home / linux-hint3 / Escritorio /

La opción -4 fuerza la conexión a través de IPv4 y la opción -6 a través de IPv6.

En la siguiente captura de pantalla, el usuario fuerza la transferencia de archivos a través de IPv4.

scp – 4   linuxhint @ 192.168.0.103:ubuntu * / home / linux-hint3 / Escritorio /

Cómo cargar archivos y directorios con scp

Esta sección explica cómo cargar archivos con comandos individuales usando scp.

La sintaxis para subir archivos regulares a un sistema remoto usando sftp es la siguiente:

scp < FiletoUpload > < RemoteUser >@< ServerIP > : < RemoteDirectory >

En el siguiente ejemplo, el usuario carga un archivo llamado file1 al subdirectorio remoto llamado Documents/ .

scp file1 linuxhint2 @ 192.168.0.103:Documentos /

Para cargar directorios, use el indicador recursivo -r , el resto de la sintaxis es similar a los ejemplos descritos anteriormente.

scp -r Escritorio / testdir linuxhint2 @ 192.168.0.103:Documentos /

El indicador -O es útil para cargar archivos en sistemas sin el protocolo sftp.

scp -O Escritorio / testdir linuxhint2 @ 192.168.0.103:Documentos /

Para acelerar la transferencia, también al cargar archivos, el usuario puede comprimir.

En el siguiente ejemplo, el usuario combina el indicador recursivo -r con -C (comprimir indicador).

scp -rC Escritorio / testdir linuxhint2 @ 192.168.0.103:Documentos /

Deshabilitar la autenticación de contraseña scp y habilitar la autenticación de clave

Originalmente, el protocolo scp se basaba en el protocolo ssh (Secure Shell), pero actualmente funciona a través de protocolos más nuevos como sftp o rsync .

El archivo de configuración que se debe editar para habilitar la autenticación de clave y deshabilitar el inicio de sesión con contraseña es /etc/ssh/sshd_config . Este archivo contiene opciones adicionales para aumentar la seguridad de la transferencia de archivos scp.

En la computadora, permitiendo las conexiones entrantes desde donde se descargan los archivos o donde se cargan, abra el archivo /etc/ssh/sshd_config con privilegios usando un editor de texto sin formato como vim o nano .

sudo nano / etc / ssh / sshd_config

Desplácese hacia abajo y busque la línea que contiene PubkeyAuthentication no , reemplácela con PubkeyAuthentication yes (Reemplace el » no » con » sí «).

También confirme PermitRootLogin no para deshabilitar el inicio de sesión raíz porque todos en el mundo conocen la existencia del usuario raíz, que puede ser el objetivo de cualquier tipo de ataque, incluida la fuerza bruta.

El superusuario raíz existe en todos los sistemas basados ​​en Unix, incluido Linux. No es una buena decisión permitir el inicio de sesión con un nombre de usuario privilegiado conocido por todos en el mundo.

No deshabilite el inicio de sesión con contraseña todavía porque el proceso de copia de clave requiere el inicio de sesión con contraseña antes de que los sistemas puedan autenticarse con claves.

Salga del archivo de configuración guardando los cambios y reinicie el servicio ssh siguiendo las instrucciones a continuación.

Distribuciones Linux basadas en Debian:

sudo systemctl reiniciar ssh

Distribuciones de Linux basadas en RedHat:

sudo systemctl reiniciar ssh

En el lado del cliente, la computadora descarga y carga archivos, el usuario debe generar el par de claves con el comando ssh-keygen .

Después de ejecutar el comando, presione ENTER para dejar el directorio predeterminado (~/.ssh/id_rsa) o el equivalente en su distribución de Linux. El proceso permite que se requiera la implementación de una frase de contraseña al autenticarse. Al incluir una frase de contraseña, se aumenta el nivel de seguridad. Se recomienda teclear uno y pulsar ENTER . Si no desea agregar una frase de contraseña, simplemente presione ENTER sin escribirla.

ssh-keygen

Después de crear con éxito el par de claves, el cliente debe enviar la clave al servidor mediante el comando ssh-copy-id con la sintaxis del siguiente ejemplo práctico.

ssh-copia-id linuxhint @ 192.168.0.103

Después de copiar la clave, pruebe el método de autenticación conectándose al segundo dispositivo.

Si la clave de autenticación tiene éxito, el usuario podrá iniciar sesión sin escribir la contraseña. Si el usuario definió una frase de contraseña al crear el par de claves, se solicitará en lugar de la contraseña, como se muestra en la captura de pantalla a continuación.

sftp @< Usuario >@< IP / Host >

Después de confirmar que la autenticación de clave pública funciona correctamente, se recomienda desactivar la autenticación de contraseña.

Para deshabilitar la autenticación de contraseña, en el lado del servidor , abra el archivo /etc/ssh/sshd/config con privilegios nuevamente usando un editor de texto como nano o vi .

sudo nano   / etc / ssh / sshd / config

Desplácese hacia abajo en el archivo de configuración y reemplace la línea PasswordAuthentication yes con PasswordAuthentication no .

En algunos casos, cuando se reduce el número de usuarios, se puede cambiar el puerto scp/ssh para evitar análisis masivos. Este cambio debe hacerse en este archivo. Si el usuario cambia el puerto predeterminado, debe implementar la opción -p <Puerto> al transferir archivos.

Salir guardando cambios.

En sistemas Linux basados ​​en Debian, reinicie el servicio ssh con el siguiente comando:

sudo systemctl reiniciar ssh

Reinicie el servicio ssh en distribuciones de Linux basadas en RedHat:

sudo systemctl reiniciar sshd

Ahora el usuario puede iniciar sesión con autenticación de clave.

Conclusión

Usar el comando scp es bastante fácil. Todo usuario de Linux puede aprenderlo mejorando su experiencia con las tareas de red. Definitivamente facilita la interacción con otras computadoras dentro de una red desde la línea de comando. Todas las instrucciones de este tutorial son válidas para todas las distribuciones de Linux, excepto los métodos de instalación limitados a las distribuciones de Linux basadas en Debian y RedHat. Todo administrador de red que trabaje desde la terminal debe dominar este comando.