私の開発マシンはFedora (36)で動作します。
最近、リモート サーバー (CentOS 7) にファイルを scp で送信しようとしたところ、不可解なエラー メッセージが表示されました。
scp: dest open(""): そのようなファイルまたはディレクトリはありません
コマンドは次のようになります。
scp -C foo.ext user@internal-vpn-ip:~/
何も特別なことではありません。これまで何年にもわたって、問題なく何度も実行してきました。奇妙だと思いました。すべてが稼働しているのに、scp がリモート パスを見つけられないのです。少し実験して、リモート ユーザー パスを拡張しました。
scp -C foo.ext user@remote-ip:/path/to/user/
そして、なんと、うまくいきました!
問題は、なぜ〜パス拡張は機能しなくなりましたか?
答え1
RedHat 9 以降では、SCP は内部的に SFTP を使用するようになったようです。
の中にOpenSSH SCP の廃止このページには、この関連スニペットを含む、RedHat 9 より前のシステムおよび RedHat 9+ システムに関する非互換性と注意事項のリストがあります。
プロトコル間のもう 1 つの違いは、~ ベースのパス処理の拡張です。OpenSSH 8.7 以降のバージョンでは、この拡張に対処するために特別な SFTP 拡張がサポートされています。残念ながら、この拡張は以前のバージョンではサポートされていないため、~ パス処理が使用されている場合、新しいバージョンの RHEL から古いバージョンにフォルダーをコピーすることは失敗します。このような場合、推奨される修正方法は絶対パスを提供することです。
つまり、パスを手動で拡張する必要があるということです。面倒ですが、少なくとも理由はわかりました :)