通過 SSH 的 SVN 不能在帶有 Tortoise SVN 的 Windows 上工作
我可以通過 SSH 訪問已
svnadmin
安裝(以及其他必要的實用程序)的 FreeBSD 機器。svn 是版本 1.7.9 (r1462340)。我在 Windows 7 x64 上,使用 Tortoise SVN 1.7.7。我已經按照這個官方指南來幫助我設置我的伺服器和 Tortoise SVN,但是我在設置它時遇到了麻煩。
我已經生成了一對私鑰/公鑰,並將它們分別添加到我的伺服器
~/.ssh/authorized_keys
文件和我的 Putty 配置中。我可以使用 putty 和我的私鑰連接到遠端機器。我也嘗試過配置 Tortoise SVN 來做同樣的事情,我正在連接到:
svn+ssh://myBSDusername@it2svn/somerepo
工作的Putty 連接配置文件
it2svn
的名稱在哪裡,並且是我的儲存庫根目錄中的儲存庫 ( )。somerepo``~/svnroot/somerepo
出現的問題是 Tortoise SVN 請求我的密鑰密碼,無論我正確輸入多少次,密碼對話框都會關閉 1-2 秒,然後再次提示我輸入密碼。它甚至沒有說它是錯誤的,它只是一遍又一遍地問我密碼。
如果我故意輸入錯誤的密碼,我會立即再次收到提示,而不會出現輸入正確密碼時出現的 1-2 秒延遲。即使我輸入胡言亂語,對話框仍然沒有說它是錯誤的。這可能是他們這邊的一個錯誤,但它仍然不能解釋為什麼我的正確密碼不被接受。
配置
以下是
authorized_keys
文件的內容(刪除了鍵的實際內容):ssh-dss AAA....FuA== myBSDusername@ems command="svnserve -t -r ~/svnroot --tunnel-user=svnAuthorDude",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-dss AAAA....IFuA== myBSDusername@ems
**重要說明:**指南說我的“命令行”應該是這樣的:
command="svnserve -t -r <ReposRootPath> --tunnel-user=<author>", no-port-forwarding,no-agent-forwarding,no-X11-forwarding, no-pty ssh-rsa <PublicKey> <Comment>
但是我使用
ssh-keygen
與指南中相同的參數生成的密鑰以ssh-dss
代替開頭ssh-rsa
,這就是為什麼ssh-rsa
在我自己的文件中被替換為dss
(顯然是因為密鑰是 DSA 而不是 RSA 密鑰)。
我使用 PuttyGen 重新生成了密鑰對,並將其設為 RSA2 密鑰對(相對於舊的 DSA 密鑰)。我也跳過了用密碼保護我的私鑰,現在一切都(神奇地)正常工作。我不知道究竟是什麼改變真正解決了這個問題,但我希望這能幫助一些未來的開發人員解決類似的問題。
以下是我使用者的(相關)內容
~/.ssh/authorized_keys
:ssh-rsa AAAA...Wc= rsa-key-20130529 command="svnserve -t -r /user/rest/of/path/svnroot --tunnel-user=someuser",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-rsa AAAA...Wc= andrei
您遇到的問題是在您的密鑰對上使用密碼而不是使用選美。
當 TortoiseSVn 與 SSH 隧道連接時,它似乎使用 plink(或 TortoisePLink)發出多個單獨的請求。每次發生這種情況時,都需要 SSH 密鑰,因此需要解鎖,因此會出現密碼請求。
如果您沒有密碼保護密鑰對,則無需詢問密碼。
如果您在使用 TortoiseSVN 之前將 pageant 配置為載入密鑰,則 plink 將從 pageant 獲取已解鎖和記憶體的密鑰。這樣您就可以使用受密碼保護的密鑰,而無需重複輸入密碼。但是,在將密鑰添加到選美時,您仍然需要輸入一次。