我不確定發生了什麼,但最近我似乎無法將任何文件從遠端伺服器複製到本地。我嘗試從本地進行 rsync 並收到以下錯誤訊息:
mut@mylocalcomputer:~$ rsync -chavzP --stats [email protected]:/home/users/mut/thedirectoryIneed /User/mut/
[email protected]'s password:
protocol version mismatch -- is your shell clean?
(see the rsync man page for an explanation)
rsync error: protocol incompatibility (code 2) at /SourceCache/rsync/rsync-42/rsync /compat.c(61) [receiver=2.6.9]
因此,我使用 rsync 並按照說明使用以下內容診斷問題(輸入到本機命令列):
ssh [email protected] /bin/true > out.dat
輸入密碼,但沒有得到任何回報 - 它只是吐出一個新的提示)。
(2) 所以我嘗試這樣做scp
,每次我從本地scp
過來時ssh
,我都會得到以下輸出,顯示檔案類型、大小、權限和檔案名,但沒有其他內容:
C0644 183 fileineedfromremoteserver.cpp
但該文件不會複製(或至少我在電腦上的任何地方都找不到它)。
關於問題可能是什麼的任何建議,或者我還可以嘗試什麼?
注意:我的本地是 OSX(BSD) 上的預設終端 CLI,伺服器是 GNU linux。在從伺服器複製檔案之前我從未遇到任何問題,而且我能想到的唯一改變是,在某個時候我輸入了從本地生成 SSH 金鑰的命令(在嘗試自動化的失敗嘗試中)我登錄伺服器而無需每次都輸入密碼)。我懷疑這與它有什麼關係。
答案1
我已經很久沒有看到這個錯誤了,但是 IIRC 當我看到它時,這是由於登入時輸出文字的 shell rc 檔案中有一些錯誤的內容。
有問題的檔案特定於您正在使用的 shell,但以下是針對 bash 修復它的方法。
登入遠端系統 (mambo.m66.com) 上的帳戶後,執行以下命令:(
. .bashrc
請注意第一個句點不是拼字錯誤)。如果你看到任何執行該命令時的輸出,您應該將 .bashrc 檔案內的命令移至 .bash_profile 中。
abydos:~ jonv$ touch sourcefile
abydos:~ jonv$ echo 'echo This should work.' > .bash_profile
abydos:~ jonv$ rsync jonv@localhost:sourcefile destfile
abydos:~ jonv$ echo 'echo This should NOT work.' > .bashrc
abydos:~ jonv$ rsync jonv@localhost:sourcefile destfile
protocol version mismatch -- is your shell clean?
(see the rsync man page for an explanation)
rsync error: protocol incompatibility (code 2) at /SourceCache/rsync/rsync-42/rsync/compat.c(61) [receiver=2.6.9]
如果您想進一步閱讀,網路上有大量資源。您可以搜尋“.bashrc vs .bash_profile”並獲得大量內容。