Minha máquina de desenvolvimento roda no Fedora (36).
Recentemente, tentei enviar um arquivo para um servidor remoto (CentOS 7) e recebi uma mensagem de erro enigmática:
scp: dest open(""): Arquivo ou diretório inexistente
O comando se parece com:
scp -C foo.ext user@internal-vpn-ip:~/
Nada fora do comum, fiz isso muitas vezes ao longo dos anos sem problemas. Estranho, pensei, tudo está funcionando, mas o scp não consegue encontrar o caminho remoto. Experimentando um pouco, expandi o caminho do usuário remoto:
scp -C foo.ext user@remote-ip:/path/to/user/
e pronto, funcionou!
A questão é: por que~a expansão do caminho não funciona mais?
Responder1
Parece que no RedHat 9+ SCP agora usa SFTP nos bastidores.
NoDescontinuação do OpenSSH SCPpágina há uma lista de incompatibilidades e advertências relacionadas aos sistemas pré-RedHat 9 e RedHat 9+, incluindo este trecho relevante.
Outra diferença entre os protocolos está na expansão do processamento de caminho baseado em ~. OpenSSH 8.7 e versões posteriores suportam uma extensão SFTP especial para lidar com esta expansão. Infelizmente, esta extensão não é suportada em versões anteriores, portanto, copiar pastas de uma nova versão do RHEL para uma antiga irá falhar se o processamento ~ path for usado. Nesses casos, a solução recomendada é fornecer caminhos absolutos.
Isso explica a necessidade de expandir manualmente o caminho. Irritante, mas pelo menos agora sabemos o porquê :)