我遇到了一个类似的问题,无法让XCode进行身份验证,但是我的存储库托管在运行DSM 5.2的Synology NAS上,该NAS上有git-server运行。
我使用的是OSX 10.11上的XCode 7.1.1,尝试使用ssh://myUser@192.168.1.220:/volume1/git/myrepository.git连接到git时,会出现一个对话框“Failed to Start SSH session: Unable to exchange encryption keys(-1)”。
如果您在nas /etc/ssh/sshd_config上启用日志记录
SyslogFacility USER
LogLevel DEBUG
然后重新启动SSH服务(在Synology Web前端),然后您可以检查/var/log/messages中发生了什么(例如使用nano /var/log/messages,然后按ctrl+w,ctrl+v跳转到文件末尾,它很长)。它会报告类似于以下内容:
mynas sshd[24182]: fatal: no matching mac found: client hmac-sha1,hmac-sha1-96,hmac-md5,hmac-md5-96,hmac-ripemd160,hmac-ripemd160@openssh.co$
基本上客户端和NAS无法就使用哪种'HMAC'算法达成一致。因此,让我们在NAS上添加一个(可能会降低安全性,但据我所知,我们无法在xcode端进行更改):
以root身份登录NAS,编辑/etc/sshd/sshd_config文件,在带有MACs: xxx的行末尾添加"hmac-sha1"(警告:强烈建议首先创建备份,如果您打错了字,可能会失去对该盒子的SSH访问!但是您仍然可以使用“Telnet”(在NAS的Web前端启用它)并使用备份。该行将如下所示:
MACs hmac-sha2-256,hmac-sha2-256-etm@openssh.com,hmac-sha2-512,hmac-sha2-512-etm@openssh.com,umac-128-etm@openssh.com,umac-128@openssh.com,hmac-sha1
重新启动SSH服务,然后使用XCode重试访问git,并再次检查日志。
Nov 29 17:30:59 mynas sshd[31077]: fatal: Unable to negotiate a key exchange method [preauth]
因此,请登录您的NAS,再次编辑sshd_config文件,并在Kexalgorithms行的末尾添加“diffie-hellman-group1-sha1”(猜测是一个不错的选择:p):
KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256,diffie-hellman-group1-sha1
好的,再次启动SSH服务,然后尝试使用XCode登录。
现在它可以工作了。
免责声明:我不是Linux专家,所以可能有更好的方法来解决这个问题。此外,这会降低您NAS的安全性,因为您接受了较不安全的算法...但至少它可以工作,如果有更好的想法,我很乐意听取。