El protocolo SSH crea un túnel seguro a través del cual puede transferir un flujo bidireccional, y puede usar ese flujo para conectar los dos procesos que desee.
Los dos procesos más familiares serían un shell (en el servidor) y un emulador de terminal interactivo (en el cliente). Eso es lo que estás usando cuando ssh a un servidor y escribe comandos en el indicador del shell remoto.
SCP es la transferencia de archivos realizada utilizando solo ese shell y un comando remoto. En SCP, una vez que el cliente está conectado al servidor y se ha realizado toda la autenticación y autorización, el cliente envía al shell remoto un comando como scp -f myfile.txt
, que simplemente escribe el contenido del archivo myfile.txt en la secuencia (para el cliente leer) o scp -t myfile.txt
que lee de la secuencia y escribe en myfile.txt.
Notarás que -f y -t (para "from" y "to") no están en las páginas de manual de scp. Se consideran internos. Hay un esquema de reconocimiento ligero y un esquema para transferir directorios al envolver el contenido del archivo en encabezados simples. Pero en su mayor parte, SCP es una cuestión básica de escribir los bytes del archivo en el túnel SSH, permitiendo que SSH se ocupe de cosas complicadas como la compresión y la integridad.
SFTP es un protocolo de transferencia de archivos mucho más complejo, que nuevamente se canaliza a través de SSH.
En SFTP, tanto las solicitudes como las respuestas son paquetes codificados en binario con nombres como "SSH_FXP_OPEN", "SSH_FXP_STAT", "SSH_FXP_READ", "SSH_FXP_DATA", "SSH_FXP_CLOSE".
Una característica interesante del protocolo es que los comandos se pueden canalizar y las respuestas pueden venir en cualquier orden. Esto puede significar que las sesiones pasan menos tiempo esperando respuestas, y hay oportunidades para optimizar las transferencias concurrentes desde un servidor con fuentes de datos de varias velocidades, aunque no sé en qué medida se han aprovechado esas oportunidades.
SFTP tiene comandos para hacer muchas cosas que SCP no aborda; como eliminar, renombrar, truncar, mover, etc.
Todos los detalles están disponibles en un borrador de IETF .
Vale la pena señalar que los paquetes SSH más nuevos reemplazan el scp
binario del usuario con un enlace simbólico al binario SFTP. Este SFTP tiene el aspecto de scp, pero en secreto está usando el protocolo SFTP.
Cita - O'Reilly SSH: The Secure Shell, The Definitive Guide , sección 5.7 "Subsistemas":
ADVERTENCIA: No elimine la línea subsystem-sftp de sshd2_config: es necesario para que scp2 y sftp funcionen. Internamente, ambos programas ejecutan ssh2 -s sftp para realizar transferencias de archivos.
El pescado es una pieza interesante de la historia. Digamos que desea transferir archivos a través de SSH, pero su sistema remoto no tiene SCP. O quizás desee realizar operaciones de archivo más sofisticadas que SCP, pero su sistema remoto no tiene SFTP. Ninguno de esos escenarios es probable hoy, pero cuando se inventó Fish, lo fueron.
Entonces, los desarrolladores del cliente Midnight Commander se propusieron crear su propia solución. Es similar a scp en principio, pero hay más comandos. El cliente envía comandos que se parecen a:
#RETR /some/name
ls -l /some/name | ( read a b c d x e; echo $x ); echo '### 100'; cat /some/name; echo '### 200'
Si está hablando con un servidor Fish, interpretará el #RETR
comando. Sin embargo, si el servidor remoto no tiene un servidor Fish instalado, los comandos serán interpretados por el shell. Primero un comentario, luego un comando que imprime información sobre el archivo, seguido del contenido del archivo rodeado de algunos marcadores.
Efectivamente, en ausencia de scp o fish, el cliente ha "enrollado su propio" equivalente scp, pero igualmente puede enviar comandos de shell para cambiar el nombre, mover, truncar, etc.
Los detalles de Fish están en la fuente de Midnight Commander aquí .
¿Qué significa todo esto desde la perspectiva del usuario final?
- las implementaciones de servidor SSH más antiguas admiten scp pero no SFTP; no puede usar un cliente SFTP con estos
- Use SFTP para rendimiento, confiabilidad y flexibilidad
- Su cliente "scp" podría ser un cliente SFTP disfrazado (se necesita cita )
- El pescado puede ser útil en circunstancias específicas, pero de lo contrario utilice el SFTP más estándar.