Mi máquina de desarrollo funciona con Fedora (36).
Recientemente intenté enviar un archivo a un servidor remoto (CentOS 7) y recibí un mensaje de error críptico:
scp: dest open(""): No existe tal archivo o directorio
El comando se parece a:
scp -C foo.ext user@internal-vpn-ip:~/
Nada fuera de lo común, lo he hecho muchas veces a lo largo de los años sin problemas. Qué extraño, pensé, todo está en funcionamiento, pero scp no puede encontrar la ruta remota. Experimentando un poco, amplié la ruta del usuario remoto:
scp -C foo.ext user@remote-ip:/path/to/user/
y listo, ¡funcionó!
La pregunta es, ¿por qué~¿La expansión de ruta ya no funciona?
Respuesta1
Parece que en RedHat 9+ SCP ahora usa SFTP bajo el capó.
En elOpenSSH SCP en desusoEn la página hay una lista de incompatibilidades y advertencias relacionadas con los sistemas anteriores a RedHat 9 y RedHat 9+, incluido este fragmento relevante.
Otra diferencia entre los protocolos está en la expansión del procesamiento de rutas basado en ~. OpenSSH 8.7 y versiones posteriores admiten una extensión SFTP especial para hacer frente a esta expansión. Desafortunadamente, esta extensión no es compatible con versiones anteriores, por lo que copiar carpetas de una nueva versión de RHEL a una antigua fallará si se utiliza el procesamiento de ruta ~. En tales casos, la solución recomendada es proporcionar rutas absolutas.
Eso explica la necesidad de expandir manualmente la ruta. Molesto, pero al menos ahora sabemos por qué :)