diciembre 2, 2020
5min Leer
Gustavo B.
El comando SCP (Secure Copy Protocol) de Linux es un protocolo de transferencia de archivos en red que permite la transferencia de archivos fácil y segura entre un host remoto y uno local, o entre dos ubicaciones remotas. Se basa en el Protocolo de Copia Remota de Berkeley Software Distribution.
Los desarrolladores full-stack utilizan con frecuencia el comando SCP para sus funciones de autenticación y cifrado sin requerir servicios de alojamiento de terceros como Github. Es una forma fácil de evitar la exposición de tus datos a rastreadores de paquetes, y de preservar su confidencialidad.
En esencia, SCP es una mezcla de RCP y SSH (Secure Shell). Se basa en el primero para realizar operaciones de copia y en el segundo para cifrar la información y autenticar los sistemas remotos.
A diferencia de Rsync, todo lo que necesitas para usar la línea de comandos de SCP con éxito es un nombre de usuario y contraseña o frase de contraseña para los sistemas involucrados en la transferencia. Esto agiliza el proceso ya que no es necesario iniciar sesión en ninguno de ellos.
Transferir archivos de forma segura es primordial cuando se usa un VPS. Afortunadamente, se puede hacer fácilmente usando el comando SCP. En este artículo aprenderás a usar los comandos SCP y cómo pueden ayudarte.
Aprovecha los descuentos de Hostinger y actualiza tu servidor VPS Linux. ¡Ahorra hasta un 70%!
El ejemplo del comando SCP básico se ve así:
scp [other options] [source username@IP]:/[directory and file name] [destination username@IP]:/[destination directory]
Puede parecer complicado al principio, ¡pero con gusto lo desglosaremos!
En este ejemplo estamos realizando una transferencia entre dos servidores VPS.
En un escenario del mundo real se vería así:
scp -p root@162.168.1.1:/media/scp.png edward@162.168.1.2:/desktop/destination
¡Es bastante simple! Si estás copiando hacia o desde una máquina local, no necesitarás la dirección IP, el destino o la ruta de origen como /escritorio/nombre_de_carpeta.
Hablemos de otras opciones que puedes usar para modificar el comando SCP. Hay 20 comunes que puedes usar tanto en forma de un solo caracter (-o), como en su equivalente descriptivo (–option). Las opciones más utilizadas son:
Como SCP utiliza el cifrado SSH, necesitarás la contraseña ssh para que se realice la transferencia de archivos. Además, es necesario tener permiso de lectura en la máquina de la que estás a punto de copiar y privilegios de escritura en la(s) máquina(s) a la que copiarás.
Para la autenticación y la configuración de la conexión, deberás generar un par de llaves ssh en el terminal mediante el siguiente comando:
ssh-keygen -t rsa
Copia esta llave del sistema remoto usando:
ssh-copy-id user@remote_machine
Una vez que te hayas autenticado en la(s) máquina(s) remota(s), la llave pública se copiará y estarás listo para iniciar las transferencias.
Si no recuerdas la(s) contraseña(s) de root para cada sistema, puedes hacer que el cliente ssh seleccione el archivo desde el cual se lee automáticamente la llave de identidad privada para la confirmación de RSA.
Para la versión 2 del protocolo, la ruta de identidad predeterminada de la llave del host es ~/.ssh/id_dsa, mientras que para la versión 1 del protocolo es ~/.ssh/id_rsa. Luego, debes averiguar dónde está almacenada la copia de seguridad de las llaves privada y pública para poder emplear el comando ssh para usarlas automáticamente.
Para la ruta /back-up/home/jack/.ssh, el comando es el siguiente:
ssh -i /back-up/home/user/.ssh/id_dsa user@yourserver.servername.domain
Consejo profesional: esta opción tiene el valor predeterminado –overwrite [yes], así que, a menos que especifiques la opción –overwrite no o –overwrite ask en el comando scp, la operación sobrescribirá los archivos que tienen nombres y ubicaciones idénticos sin ninguna advertencia.
Si estás transfiriendo archivos grandes, te recomendamos utilizar una sesión tmux o que ejecutes el comando dentro de una pantalla diferente. Además, también debes usar la opción –v para transferencias grandes. Esto forzará a scp a mostrar cualquier conexión de depuración, autenticación o problemas de configuración.
La mejor parte de SCP en Linux es que te da la posibilidad de transferir archivos entre dos hosts o entre un host y una máquina local. Veamos cómo se debería usar el comando para cada tipo de transferencia.
Copiaremos un archivo local scp.zip, al usuario de la máquina remota llamado root. El nombre de usuario es seguido por la dirección IP del servidor.
Ejemplo:
scp /users/Edward/desktop/scp.zip root@191.162.0.2:/writing/article
Si no tienes configurada una confirmación automática de cliente ssh, se te solicitará que ingreses la contraseña del usuario de la máquina remota y verás un medidor de progreso. Se vería algo como esto:
root@191.162.0.2’s password: novel3.zip 100% 0 0.0KB/s 00:00
Pero digamos que la máquina remota está configurada para escuchar las conexiones SSH en un puerto que no sea el predeterminado 22. En este caso, debes especificar ese puerto usando una opción.
scp -P 2322 /users/Edward/desktop/scp.zip root@191.162.0.2:/writing/article
Si también quieres cambiar el nombre del archivo durante la operación de transferencia, tu comando tendrá este aspecto (si tu puerto no es el predeterminado, simplemente agrega –P y el número de puerto):
scp /users/Edward/desktop/scp.zip root@191.162.0.2:/writing/article/howtoscp.zip
Si quieres copiar un directorio que tiene más archivos y/o subdirectorios, usa el comando -r que describimos anteriormente
scp -r /users/Edward/desktop root@191.162.0.2:/writing/article
En este proceso, el origen y el destino del comando se invierten, por lo que esto debe reflejarse en la sintaxis. Esta vez, estamos intentando copiar scp.zip desde el mismo host remoto a nuestra máquina local:
scp root@191.162.0.2:/writing/articles/SCP.zip Users/Edward/Desktop
Nuevamente, esto debería solicitar la misma salida de inicio de sesión SSH en la que debes ingresar la contraseña, a menos que la autenticación esté deshabilitada por los privilegios de sudo, o si forzaste al cliente ssh a usar una llave privada en tu máquina.
Para copiar archivos de un host remoto a otro, deberás ingresar las contraseñas de ambas cuentas después de ejecutar este comando en tu terminal.
Ejemplo:
scp root@191.162.0.2:/writing/article/scp.zip edward@11.10.0.1:/publishing
El comando anterior copia el archivo fuente /writing/article/scp.zip desde el primer host al segundo. Para copiar carpetas, simplemente agrega la opción –r y especifica la ruta de la carpeta en lugar del archivo dentro de ella, como hicimos antes.
En circunstancias normales, el archivo va directamente del primer host remoto al segundo. Sin embargo, si quieres redireccionar la operación a través de tu máquina, puedes agregar la opción -3:
scp -3 root@191.162.0.2:/writing/article/scp.zip edward@11.10.0.1:/publishing
¡Eso es todo!
En este artículo hemos aprendido cómo transferir fácilmente archivos entre hosts remotos y locales con el comando SCP de Linux. Esto es extremadamente útil cuando trabajas con múltiples servidores. El protocolo de copia segura (SCP – Secure Copy Protocol) hace que sea más fácil copiar con éxito información de un host remoto a otro sin tener que iniciar sesión.
Además, este método de transferencia remota de archivos cifra tus datos con secure shell (SSH), lo que garantizará la confidencialidad de la información que se transmita.
febrero 22 2020
Gracias Gustavo x muy buena explicacion. Si necesitas mi ayuda en otros temas estoy en FB - Yurec Luthier. Un saludo
abril 21 2020
Si existe ya un archivo con el mismo nombre en el directorio donde estas copiandolo se sobreescribe?
abril 23 2020
Hola En la opción: –c permitirá la compresión de los datos mientras se lleva a cabo la operación de transferencia. La C es mayúscula El post está perfecto! :)
abril 23 2020
Soy el pesao de antes. la opcióon -u no funciona, tampoco aparece en el man.
Agrega un comentario