我正在設定一台伺服器,以便能夠支援具有主機金鑰驗證的 SSH,目前由一台即將失效的舊伺服器處理。截至目前,我可以成功連接 SSH 並像平常一樣在終端中進行互動。但是,如果我包含命令或將 SSH 放入 RSync 命令中,則會收到錯誤「主機金鑰驗證失敗」。
所以這個指令有效:
ssh -o StrictHostKeyChecking=no -i /cygdrive/C/keys/id_rsa [email protected]
而以下情況則不然:
ssh -o StrictHostKeyChecking=no -T -i /cygdrive/C/keys/id_rsa [email protected] ssh 192.168.0.2 mkdir -p /mnt/storage/new_folder
然而,它們在指向舊伺服器時都可以工作,因此命令本身應該沒問題。此外,如果我能夠設法不更改命令,那麼我們就可以向後相容。
我在下面新增了新伺服器上的 sshd_config 設定(設定為模仿舊伺服器),以防它們有幫助,這裡唯一的項目是未註解的項目。
HostbasedAuthentication 否
RhostsRSAAuthentication 否
PermitEmptyPasswords 否
ChallengeResponseAuthentication 否
UsePAM 是
X11Forwarding 是
PrintMotd否
PrintLastLog 是
TCPKeepAlive 是
AcceptEnv Lcation LC_* 子系統
185/FRSA PermitRootLogin
是 StrictModes 是
新伺服器是 Ubuntu 17.10(下一個伺服器即將推出時將更新到 LTS)。舊伺服器是 Debian 6.0.6。
編輯:忘了提及,當我將 RSync 與“-e”一起使用時也會發生此錯誤。但是我發現在 RSync 命令中,我可以透過使用[email protected]:/mnt/storage/new_folder
遠端路徑參數來解決該問題。如果我刪除“username@”,則會再次收到錯誤。同樣,失敗的版本在舊伺服器上工作正常,僅在新伺服器上失敗。另請記住,這是遺留程式碼,因此如果我能讓舊命令按原樣工作,它將為我節省大量推送更新的時間。
答案1
好的,您位於主機 A(未指定)上,並且當您執行命令 1 時:
ssh -o StrictHostKeyChecking=no -i /cygdrive/C/keys/id_rsa [email protected]
您將在主機 B (192.168.0.2) 上取得一個互動式 shell。但是當你執行命令 2 時:
ssh -o StrictHostKeyChecking=no -T -i /cygdrive/C/keys/id_rsa [email protected] ssh 192.168.0.2 mkdir -p /mnt/storage/new_folder
(來自主機 A),您會收到錯誤。
好的,從主機 A 執行命令 1 並在主機 B 上取得互動式 shell。
ssh 192.168.0.2 mkdir -p /mnt/storage/new_folder
會發生什麼事?如果這也失敗了,那麼你的問題不是“發送命令時SSH 因主機密鑰錯誤而失敗,但沒有主機密鑰錯誤也能工作”,你的問題是主機B 無法ssh 到自身- 或者更具體地說,「用戶主機 B 上的 」 未配置為能夠透過 ssh 連接到主機 B。
並且,為了完整起見,如果運行命令 2c 會發生什麼:
ssh -o StrictHostKeyChecking=no -T -i /cygdrive/C/keys/id_rsa [email protected] mkdir -p /mnt/storage/new_folder
(來自主機A)?