GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué agregar IP local y nombre de usuario en scp devuelve un error de clave pública?

Nota importante:La máquina que llamas "máquina local" es totalmente irrelevante. La verdadera historia comienza cuando ya estás en 100.100.100.1 . En el contexto de scp y en el contexto de esta respuesta, "local" es la máquina donde scp es invocado por usted.

¿Por qué falla el primer [comando]?

Intentó copiar entre dos (formalmente) hosts remotos. scp reconoce [email protected]:/path/1/ como una ruta no local. No importa [email protected] apunta a la máquina local. La herramienta no comprueba (y no debería comprobar) si una dirección que parece remota apunta a la máquina local. Con solo referirte a la fuente como si fuera remota, hiciste scp tratarlo como remoto. Además, el destino era remoto.

La copia entre dos hosts remotos se puede hacer con o sin el -3 opción:

-3
Las copias entre dos hosts remotos se transfieren a través del host local. Sin esta opción, los datos se copian directamente entre los dos hosts remotos. […]

El fragmento en negrita se aplica a su caso (incluso si su scp no es compatible con -3 ).

Si usa -v con tu primer comando

scp -v -i ~/keyfile -r [email protected]:/path/1/ [email protected]:/path/2/

verás scp se conecta desde el host local al host de origen ("por cierto" es el mismo host) usando la clave especificada con -i . (Aparentemente, el host está configurado para aceptar esta clave, probablemente porque el otro servidor usa una clave idéntica para conectarse).

Luego verá otro scp se invoca en el host de origen. El comando es:

scp -v -r /path/1/ [email protected]:/path/2/

-v y -r están allí porque estaban en su comando local. La ruta de origen se traduce a una ruta local; el destino no cambia. Si este comando se ejecuta correctamente, los datos se "copiarán directamente entre los dos hosts remotos".

Tenga en cuenta que no hay -i . Debería -i ~/keyfile estar allí? O más bien -i /home/cindy/keyfile ¿más o menos? (porque el scp local obtuvo algo como esto después de que el shell local expandiera la tilde).

No. En general, un host de origen remoto puede ser (y generalmente lo es) diferente del host local. Una ruta que sea válida para el host local puede apuntar a cualquier cosa o a nada en el host remoto. Si scp en el host de origen se invocó con -i , causaría más problemas de los que podría resolver. Es algo bueno -i no se propaga al comando invocado en el host de origen. Pero luego el host se conecta al destino usando su clave predeterminada o lo que sea que su configuración le diga que use.

En su caso, parece que uno necesita el ~/keyfile local para conectarse al host de destino. El host de origen contiene el archivo correcto (porque en este caso particular, el local y el origen son la misma máquina), pero el scp el comando que realmente se conecta al destino carece de -i (como debería ser en general) y por lo tanto la clave no se utiliza.

Su segundo comando usó una ruta local como fuente, solo el destino era remoto. En este caso la clave especificada con -i se usó para conectarse desde el host local al host de destino, exactamente como lo planeó. Por lo tanto, funcionó.

Tenga en cuenta si configuró la máquina local para usar automáticamente ~/keyfile para conectarse al otro servidor (IdentityFile en ~/.ssh/config ), entonces el primer comando funcionaría. El host local se conectaría innecesariamente a sí mismo, solo para decirse a sí mismo que se conecte al destino, pero aun así funcionaría. La primera conexión usaría ~/keyfile debido a -i , la segunda conexión usaría ~/keyfile debido a la configuración.


Del manual de scp, descripción de la opción -3:Las copias entre dos hosts remotos se transfieren a través del host local. Sin esta opción, los datos se copian directamente entre los dos hosts remotos. Tenga en cuenta que esta opción desactiva el medidor de progreso y selecciona el modo por lotes para el segundo host, ya que scp no puede solicitar contraseñas o frases de contraseña para ambos hosts.

De acuerdo con la descripción, primero falla porque 2 servidores remotos se comunicarán directamente (en realidad, el servidor 100.100.100.1 se comunicará con el servidor 100.100.100.2 a través de ssh), por lo tanto, tiene las opciones:

  1. Utilice la opción -3.
  2. Configure 2 servidores remotos para poder autenticarse con la clave ssh del archivo de claves. Si puede iniciar sesión desde el servidor 100.100.100.1 al 100.100.100.2 con la tecla ssh, su comando original funcionará.

Linux
  1. Cómo corregir el error "Error en la verificación de la clave del host"

  2. Instalación de R desde el repositorio CRAN Ubuntu:sin error de clave pública

  3. ¿Qué código de error devuelve un proceso que falla en el segmento?

  4. ¿Por qué ENOENT significa No existe tal archivo o directorio?

  5. ¿Por qué malloc() llama a mmap() y brk() indistintamente?

Cómo configurar la clave pública y privada SSH en Linux

Linux:¿por qué aparece “drm:vmw_host_log [vmwgfx]] *error* No se pudo enviar el mensaje de registro del host” y qué puedo hacer para solucionarlo?

¿Por qué Scp es tan lento y cómo hacerlo más rápido?

Cómo agregar una clave SSH a VS Code y conectarse a un host

Realice SSH y SCP sin ingresar la contraseña en openSSH

¿Por qué una función principal sin declaración de retorno devuelve el valor 12?