通常の SCP コマンドが失敗する (VPN/ネットワークがアクティブ)

通常の SCP コマンドが失敗する (VPN/ネットワークがアクティブ)

私の開発マシンは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 から古いバージョンにフォルダーをコピーすることは失敗します。このような場合、推奨される修正方法は絶対パスを提供することです。

つまり、パスを手動で拡張する必要があるということです。面倒ですが、少なくとも理由はわかりました :)

関連情報