这些指令在Linux中可以正常工作。但是在Windows中,今天对我来说不起作用。
我找到了一个对我有帮助的答案,也许这会帮助OP。我尝试了很多方法来解决这个问题。你需要使用"ssh-add"将新的非标准命名的密钥文件添加进去!这里是一个神奇的方法:生成新的SSH密钥并将其添加到ssh-agent。一旦你知道了"在Windows中使用ssh-add添加密钥"的关键词,你就会发现很多其他链接。
如果我经常使用Windows,我会找到一些方法使这个过程更加持久。https://github.com/raeesbhatti/ssh-agent-helper。
ssh密钥代理会寻找默认的"id_rsa"和其他它知道的密钥。你用非标准名称创建的密钥必须被添加到ssh密钥代理中。
首先,在Git BASH shell中启动密钥代理:
$ eval $(ssh-agent -s)
Agent pid 6276
$ ssh-add ~/.ssh/Paul_Johnson-windowsvm-20180318
Enter passphrase for /c/Users/pauljohn32/.ssh/Paul_Johnson-windowsvm-20180318:
Identity added: /c/Users/pauljohn32/.ssh/Paul_Johnson-windowsvm-20180318 (/c/Users/pauljohn32/.ssh/Paul_Johnson-windowsvm-20180318)
然后我切换到想要克隆repo的目录
$ cd ~/Documents/GIT/
$ git clone git@git.ku.edu:test/spr2018.git
Cloning into 'spr2018'...
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
我花了很长时间才解决了这个问题。
在此期间,我尝试了其他一些方法。
起初,我认为这是由于文件和文件夹权限引起的。在Linux上,如果文件夹未设置为700,则会拒绝.ssh设置。Windows则为711。在Windows中,我找不到任何方法可以使权限为700。
与此作斗争之后,我认为这不可能是问题所在。原因如下。
如果密钥命名为"id_rsa",则git可以正常工作!Git能够连接到服务器。但是,如果我将密钥文件命名为其他名称,并以一致的方式修复配置文件,则无论如何,git都无法连接。这让我觉得权限不是问题所在。
您可以执行ssh命令的详细输出来调试此问题。
在git bash shell中,运行以下命令:
$ ssh -T git@name-of-your-server
注意,这里的用户名应该是“git”。如果您的密钥已设置并且找到了配置文件,则会看到以下内容,就像我在我的Linux系统中测试的一样:
$ ssh -T git@git.ku.edu
Welcome to GitLab, Paul E. Johnson!
另一方面,在Windows中,在应用“ssh-add”之前,我遇到了与您相同的问题。它需要git的密码,但通常会失败。
$ ssh -T git@gitlab.crmda.ku.edu
git@gitlab.crmda.ku.edu's password:
如果我手动将我的密钥复制到"id_rsa"和"id_rsa.pub",那么这个操作就可以正常工作。在运行ssh-add之后,观察Windows Git BASH中的结果。
$ ssh -T git@gitlab.crmda.ku.edu
Welcome to GitLab, Paul E. Johnson!
如果你在这里,你会听到我跳舞欢呼的声音。
要找出问题出在哪里,你可以使用“ssh -Tvv”命令来运行。
在Linux中,当它成功时,我会看到这个。
debug1: Offering RSA public key: pauljohn@pols124
debug2: we sent a publickey packet, wait for reply
debug1: Server accepts key: pkalg ssh-rsa blen 279
debug2: input_userauth_pk_ok: fp SHA256:bCoIWSXE5fkOID4Kj9Axt2UOVsRZz9JW91RQDUoasVo
debug1: Authentication succeeded (publickey).
在Windows中,当发生故障时,我会看到它寻找默认名称:
debug1: Found key in /c/Users/pauljohn32/.ssh/known_hosts:1
debug2: set_newkeys: mode 1
debug1: rekey after 4294967296 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug2: set_newkeys: mode 0
debug1: rekey after 4294967296 blocks
debug2: key: /c/Users/pauljohn32/.ssh/id_rsa (0x0)
debug2: key: /c/Users/pauljohn32/.ssh/id_dsa (0x0)
debug2: key: /c/Users/pauljohn32/.ssh/id_ecdsa (0x0)
debug2: key: /c/Users/pauljohn32/.ssh/id_ed25519 (0x0)
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Next authentication method: publickey
debug1: Trying private key: /c/Users/pauljohn32/.ssh/id_rsa
debug1: Trying private key: /c/Users/pauljohn32/.ssh/id_dsa
debug1: Trying private key: /c/Users/pauljohn32/.ssh/id_ecdsa
debug1: Trying private key: /c/Users/pauljohn32/.ssh/id_ed25519
debug2: we did not send a packet, disable method
debug1: Next authentication method: password
git@gitlab.crmda.ku.edu's password:
那是我需要的提示,它找到了我的~/.ssh/config文件,但从未尝试使用我想要尝试的密钥。
我很少使用Windows,这让我感到沮丧。也许经常使用Windows的人会修复并忘记这个问题。