Tengo dos hosts remotos.
host1-> 10.3.0.1
host2-> 10.3.0.2
Ambos ejecutan un servidor ssh.
El servidor ssh escucha en el puerto 22 en host1 y en el puerto 6969 en host2. Ahora, usando mi máquina local, necesito copiar algo de host1 a host2 sin iniciar sesión en host1 o host2 a través de ssh. Algo como,
scp [email protected]:/path/to/file [email protected]/path/to/file
¿Cómo puedo hacer esto? Tenga en cuenta que los dos hosts usan puertos diferentes para ssh.
-P
indicador existe para especificar el puerto a utilizar, en caso de transferencia de remoto a remoto, ssh no tiene un comportamiento definido sobre cómo especificar el puerto por host ...Respuestas:
En el pasado, la forma en que
scp
funcionaba, cuando se le llamaba ( ingenuamente ) para copiar archivos entre sistemas remotos, era muy inconveniente: si escribía, por ejemploscp
primero abriría unassh
sesión en remote1, y luego se ejecutaríascp
desde allí a remote2. Para que esto funcione, tendría que configurar las credenciales de autorización para remote2 en remote1.La forma moderna de hacerlo, en cambio, ("moderna" porque se implementó hace solo unos años, y tal vez no todos tienen
-3
capacidadscp
) requiere dos pasos. El primer paso necesario es usar~/.ssh/config
para configurar todas las opciones para la conexión a remoto1 y remoto2, de la siguiente manera:De esta manera, es posible pasar todas las opciones necesarias al comando sin ambigüedades : por ejemplo, si hubiéramos dicho en la CLI que use el puerto 2222 sin la configuración anterior, no habría estado claro si nos referíamos a remoto1 o remoto2 , y igualmente para el archivo que contiene las claves criptográficas. De esta manera, la CLI se mantiene ordenada y simple.
En segundo lugar, use la
-3
opción, como sigue:La
-3
opción da instruccionesscp
para enrutar el tráfico a través de la PC en la que se emite el comando, aunque sea un tercero en la transferencia. De esta manera, las credenciales de autorización deben residir solo en la PC emisora, el tercero.fuente
~/.ssh/config
archivo: cloud.google.com/compute/docs/gcloud-compute, pero no creo que AWS tenga el mismo soporte-v
.La última vez que probé esto, scp no pudo hacer eso. Su línea de comando se ve bien. Esta solución funcionará:
fuente
En mi caso, estaba haciendo una copia remota a remota, sin el
-3
argumento. El puerto proporcionado con el parámetro '-P' funciona con el primer servidor, pero el puerto 22 se usa con el segundo.La solución es editar el
/etc/ssh/ssh_config
archivoserver1
y agregar estas líneas:De esta manera, el puerto 1234 se usa para ambos. Podría ser diferente también.
Esta solución tiene un mejor rendimiento que las soluciones anteriores, porque la comunicación es directa.
fuente
El origen y el destino pueden especificarse como un URI en la forma scp: // [usuario @] host [: puerto] [/ ruta]
para que puedas ejecutar:
fuente