我的開發機器在 Fedora (36) 上運作。
最近,我嘗試將檔案 scp 到遠端伺服器(CentOS 7)並收到一條神秘的錯誤訊息:
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+ 系統的不相容性和警告的列表,包括這個相關的片段。
協定之間的另一個區別在於基於 ~ 的路徑處理的擴展。 OpenSSH 8.7 及更高版本支援特殊的 SFTP 擴充來處理這種擴充。不幸的是,早期版本不支援此擴展,因此如果使用 ~ 路徑處理,將資料夾從新版本 RHEL 複製到舊版本將會失敗。在這種情況下,建議的修復方法是提供絕對路徑。
這就解釋了需要手動擴展路徑。很煩人,但至少現在我們知道為什麼了:)