Solía pensar que SCP es una herramienta para copiar archivos a través de SSH, y copiar archivos a través de SSH se llama SFTP, que en sí mismo es sinónimo de FISH.
Pero ahora, cuando estaba buscando un complemento de Total Commander para hacer esto en Windows, me di cuenta de que en su página dice "Permite el acceso a servidores remotos a través de FTP seguro (FTP a través de SSH). Requiere SSH2. Esto NO ES lo mismo como SCP ".
Si no es lo mismo, ¿qué estoy entendiendo mal?
ssh
scp
sftp
fish-protocol
Ivan
fuente
fuente
Respuestas:
SFTP no es el protocolo FTP sobre ssh, sino una extensión del protocolo SSH incluido en SSH2 (y algunas implementaciones de SSH1). SFTP es un protocolo de transferencia de archivos similar al FTP pero utiliza el protocolo SSH como protocolo de red (y se beneficia al dejar SSH para manejar la autenticación y el cifrado).
SCP es solo para transferir archivos y no puede hacer otras cosas como enumerar directorios remotos o eliminar archivos, lo que SFTP sí hace.
FISH parece ser otro protocolo que puede usar SSH o RSH para transferir archivos.
fuente
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) oscp -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.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:
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?
fuente
Ponlo simple:
fuente
sftp
yscp
requiere programas especiales en el lado del servidor, a diferencia de FISH, que usa solo las utilerías básicas de Unix en el shell remoto.scp
scp o sftp-server). Y hay casos en efecto cuando el lado remoto es un "restringida" Unix, donde no se puede instalar lo que quiere: para transferir archivos a Android a través de SSH (a través de WiFi), he escrito el conjunto de rpush-gato guiones - tal vez, un cliente FISH funcionaría. (tramp-fish.el
en Emacs también podría: el cliente TRAMP normal no funcionaba porquestat
no estaba en Android).scp
se necesita también en el lado del servidor, además del lado del cliente? Con una búsqueda rápida en Google, no pude encontrar nada que confirme quescp
también se necesita en el lado del servidor.FISH y SFTP son similares, y como se observa, ambos funcionan sobre SSH, SFTP requiere soporte y configuración específicos en el servidor SSH para facilitar la transferencia, pero es un poco más seguro y permite que los SysAdmins solo permitan SFTP (en estas situaciones FISH ganó no funciona).
FISH requiere un shell (sh / rsh por ejemplo) para copiar, y por lo tanto requiere acceso SSH completo a la máquina, imagino que sería más difícil de asegurar (no puedo comentar objetivamente sobre esto ya que nunca he tenido que hacerlo).
Siempre que sea posible, recomendaría SFTP, scp, FISH (en ese orden).
Artículo de Wikipedia FISH
fuente
scp
scp o sftp-server). Y hay casos en efecto cuando el lado remoto es un "restringida" Unix, donde no se puede instalar lo que quiere: para transferir archivos a Android a través de SSH (a través de WiFi), he escrito el conjunto de rpush-gato guiones - tal vez, un cliente FISH funcionaría. (tramp-fish.el
en Emacs también podría: el cliente TRAMP normal no funcionaba porquestat
no estaba en Android).