Windows上的Git不要求SSH密钥密码或使用SSH密钥

Windows上的Git不要求SSH密钥密码或使用SSH密钥,windows,Windows,根本问题是,我从来没有看到输入SSH密钥密码、SSH代理或编号的提示。因此,这就像我输入了错误的密码,并默认假装我没有密钥一样。 这在多台计算机上发生。我不久前设置了我的ssh密钥,一切都很好,但每隔一段时间我就会进行git推送(通常是在重新启动计算机之后),我会被要求输入git源服务器的密码,而不是ssh密钥的密码。由于我的源服务器没有密码,这使我无法推动更改 有时它会在重新启动后自行解决,有时则不会。通常我会做很多反复猜测,其中一个最终解决了问题,但我现在记不清哪些有效,哪些无效 解决这个问

根本问题是,我从来没有看到输入SSH密钥密码、SSH代理或编号的提示。因此,这就像我输入了错误的密码,并默认假装我没有密钥一样。

这在多台计算机上发生。我不久前设置了我的ssh密钥,一切都很好,但每隔一段时间我就会进行git推送(通常是在重新启动计算机之后),我会被要求输入git源服务器的密码,而不是ssh密钥的密码。由于我的源服务器没有密码,这使我无法推动更改

有时它会在重新启动后自行解决,有时则不会。通常我会做很多反复猜测,其中一个最终解决了问题,但我现在记不清哪些有效,哪些无效

解决这个问题的正确方法是什么?实际问题是什么?我的SSH密钥被锁定了吗?是否某些windows进程启动不正确?是否正在吃掉路径变量?我对windows不太了解(通常我是在linux上开发的),所以我在这里感到非常茫然

编辑:第一个答案提到ssh代理。一些谷歌搜索让我来到这里:

这说明了如何将ssh代理设置为autostart,并了解windows中的密钥。(我甚至不知道您可以在windows中使用bash配置文件)

这没有帮助。

我的git bash现在说“添加了标识:/c/Users/{{ME}}/.ssh/id_rsa”,它不要求我输入密钥密码,而且我仍然无法推送到源服务器(它仍然要求输入服务器密码)

我可以确认我的ssh密钥确实存在于代理正在查看的位置。我还可以确认是否添加了密钥:ssh add-l从存储密钥的位置显示单个密钥

Edit:将GIT_SSH设置为指向SSH可执行文件的环境变量也没有任何作用,但无论如何,这是一个长期的尝试

编辑:sshgit@git.myhost.com产出:

$ ssh -v git@git.myhost.lan
OpenSSH_6.6.1, OpenSSL 1.0.1i 6 Aug 2014
debug1: Reading configuration data /c/Users/eschjen/.ssh/config
debug1: /c/Users/eschjen/.ssh/config line 1: Applying options for git.myhost
.lan
debug1: Connecting to git.myhost.lan [10.116.22.40] port 22.
debug1: Connection established.
debug1: identity file /c/Users/eschjen/.ssh/id_rsa type 1
debug1: identity file /c/Users/eschjen/.ssh/id_rsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.6.1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH_5* compat 0x0c000000
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<3072<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Server host key: RSA ae:81:77:0d:1c:8e:6a:aa:a8:69:36:1b:e4:ca:33:ee
debug1: Host 'git.myhost.lan' is known and matches the RSA host key.
debug1: Found key in /c/Users/eschjen/.ssh/known_hosts:1
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mi
c,password
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /c/Users/eschjen/.ssh/id_rsa
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mi
c,password
debug1: Next authentication method: password
git@git.myhost.lan's password:
$ssh-vgit@git.myhost.lan
OpenSSH_6.6.1、OpenSSL 1.0.1i 2014年8月6日
debug1:正在读取配置数据/c/Users/eschjen/.ssh/config
debug1:/c/Users/eschjen/.ssh/config第1行:为git.myhost应用选项
兰先生
debug1:连接到git.myhost.lan[10.116.22.40]端口22。
debug1:已建立连接。
debug1:identity file/c/Users/eschjen/.ssh/id\u rsa类型1
debug1:identity file/c/Users/eschjen/.ssh/id\u rsa-cert类型-1
debug1:启用协议2.0的兼容模式
debug1:本地版本字符串SSH-2.0-OpenSSH_6.6.1
debug1:远程协议版本2.0,远程软件版本OpenSSH_5.3
debug1:匹配:OpenSSH_5.3 pat OpenSSH_5*compat 0x0000000
debug1:SSH2\u MSG\u KEXINIT已发送
debug1:SSH2\u MSG\u KEXINIT已收到
debug1:kex:server->client aes128 ctr hmac-md5无
debug1:kex:客户端->服务器aes128 ctr hmac-md5无

debug1:SSH2_MSG_KEX_DH_GEX_请求(1024您需要告诉您的计算机在重新启动系统后再次添加密钥。大多数情况下,这是通过
ssh代理完成的,仅添加标识是不够的。
C:\Users\{username}中应该有一个名为
config
(无扩展名)的文件\.ssh
目录

您可以定义用于给定主机的密钥,如下所示:

Host myhost.name.com
 IdentityFile ~/.ssh/my_keyfile_name
正确配置的结果是输入密码请求:

Enter passphrase for key '/c/Users/{{username}}/.ssh/my_keyfile_name':
Edit1:您可以通过添加-v参数来检索ssh的详细输出。实际示例(替换主机名):

λssh-vigor@myhost.at
OpenSSH_6.6.1、OpenSSL 1.0.1m 2015年3月19日
debug1:正在读取配置数据/c/Users/Igor/.ssh/config
debug1:/c/Users/Igor/.ssh/config第4行:应用myhost.at的选项
debug1:连接到myhost.at[192.168.2.1]端口22。
debug1:已建立连接。
debug1:identity file/c/Users/Igor/.ssh/myhost服务器类型-1
debug1:identity file/c/Users/Igor/.ssh/myhost服务器证书类型-1
debug1:启用协议2.0的兼容模式
debug1:本地版本字符串SSH-2.0-OpenSSH_6.6.1
debug1:远程协议版本2.0,远程软件版本OpenSSH_5.5p1 Debian-6+squeeze5
debug1:匹配:OpenSSH_5.5p1 Debian-6+挤压5拍OpenSSH_5*兼容0x0000000
debug1:SSH2\u MSG\u KEXINIT已发送
debug1:SSH2\u MSG\u KEXINIT已收到
debug1:kex:server->client aes128 ctr hmac-md5无
debug1:kex:客户端->服务器aes128 ctr hmac-md5无

debug1:SSH2_MSG_KEX_DH_GEX_请求(1024我浪费了几个小时试图解决相同的问题-SSH不会为我的密钥对请求密码,即使pageant没有运行

SSH使用不同的密钥格式(SSH-1和SSH-2),更重要的是,如果RSA密钥是SSH-2格式,则拒绝读取。使用Puttygen生成密钥对,然后将其转换为SSH-1格式以保存。SSH\id\u RSA为我解决了这个问题

  • 生成密钥对
  • 使用有意义的名称保存它(如basecomputer.ppk)
  • 将文件导出为OpenSSH格式,并使用名称id\u rsa保存(无扩展名)

  • Git clone现在将请求密码短语(至少对我是这样).Google关于设置Git repo的说明忽略了关键的第三步。

    这似乎不是我的问题。每次我想使用我的密钥时,都有人要求我输入密码,我并不感到不安。相反,我不是被要求输入密码,而是Git跳到要求服务器密码。使用ssh代理does对此没有帮助。嗯,但是您仍然必须告诉您的系统要使用哪个密钥。那么,在没有使用ssh代理或手动添加密钥的情况下,您在哪里执行此操作?我不确定我是否解析了您的问题。如果我只有一个密钥,为什么我必须指定要使用哪个密钥?如果在任何情况下都必须这样做,答案是我没有执行此操作(因此这可能是我的问题)。我会做更多的研究。我会说使用ssh代理没有帮助,如果是的话
    λ ssh -v igor@myhost.at
    OpenSSH_6.6.1, OpenSSL 1.0.1m 19 Mar 2015
    debug1: Reading configuration data /c/Users/Igor/.ssh/config
    debug1: /c/Users/Igor/.ssh/config line 4: Applying options for myhost.at
    debug1: Connecting to myhost.at [192.168.2.1] port 22.
    debug1: Connection established.
    debug1: identity file /c/Users/Igor/.ssh/myhost-server type -1
    debug1: identity file /c/Users/Igor/.ssh/myhost-server-cert type -1
    debug1: Enabling compatibility mode for protocol 2.0
    debug1: Local version string SSH-2.0-OpenSSH_6.6.1
    debug1: Remote protocol version 2.0, remote software version OpenSSH_5.5p1 Debian-6+squeeze5
    debug1: match: OpenSSH_5.5p1 Debian-6+squeeze5 pat OpenSSH_5* compat 0x0c000000
    debug1: SSH2_MSG_KEXINIT sent
    debug1: SSH2_MSG_KEXINIT received
    debug1: kex: server->client aes128-ctr hmac-md5 none
    debug1: kex: client->server aes128-ctr hmac-md5 none
    debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<3072<8192) sent
    debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
    debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
    debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
    debug1: Server host key: RSA 67:3f:96:7b:6a:68:55:89:a8:30:a9:ed:67:ef:40:a4
    debug1: Host 'myhost.at' is known and matches the RSA host key.
    debug1: Found key in /c/Users/Igor/.ssh/known_hosts:3
    debug1: ssh_rsa_verify: signature correct
    debug1: SSH2_MSG_NEWKEYS sent
    debug1: expecting SSH2_MSG_NEWKEYS
    debug1: SSH2_MSG_NEWKEYS received
    debug1: Roaming not allowed by server
    debug1: SSH2_MSG_SERVICE_REQUEST sent
    debug1: SSH2_MSG_SERVICE_ACCEPT received
    debug1: Authentications that can continue: publickey,password
    debug1: Next authentication method: publickey
    debug1: Offering RSA public key: /c/Users/Igor/.ssh/id_rsa
    debug1: Authentications that can continue: publickey,password
    debug1: Trying private key: /c/Users/Igor/.ssh/myhost-server
    debug1: key_parse_private2: missing begin marker
    debug1: key_parse_private_pem: PEM_read_PrivateKey failed
    debug1: read PEM private key done: type <unknown>
    Enter passphrase for key '/c/Users/Igor/.ssh/myhost-server':