在Windows 7中使用PuTTY生成的SSH密钥连接到github


20

在原始的Windows 7 Enterprise安装上:

  1. 安装PuTTY 0.62
  2. 使用puttygen.exe创建公钥/私钥对
  3. 将要粘贴到OpenSSH的公钥添加到github帐户中
  4. 将私钥添加到选美
  5. 使用以下选项安装msysgit 1.7.8:
    • 从Windows命令提示符使用Git
    • 使用(Tortoise)Plink指向正确的plink.exe
  6. 通过在PuTTY中连接到github.com并接受指纹,确保将github指纹添加到Know_hosts
  7. 编辑~/.ssh/config阅读:

    Host github.com
        User git
        Hostname github.com
        PreferredAuthentications publickey
        IdentityFile ~\.ssh\github.ppk
    

ssh -vvvT git@github.com给出:http : //pastebin.com/Tu3Fc6nJ。请注意,尽管密码已成功加载到选美中,但系统仍会提示我输入密码。

我已经尝试过:chmod 700 ~/.ssh; chmod 600 ~/.ssh/*从Git Bash内部,但是没有通过验证没有影响ls -l

我应该注意,我在以前的Windows 7安装中已经使用了此确切的设置。据我所知,一切都是相同的。

起作用的是从Git Bash内部生成密钥。但是,我不能将这些密钥添加到选美中,这是一个巨大的痛苦。实际上,似乎任何使用PuTTY生成的密钥的尝试都是不成功的。

有什么见解阻止了基于日志的工作?提前致谢。


使用-vT,请减少详细程度
Lazy Badger

Answers:


20

您会混淆两个完全独立的程序:PuTTY和OpenSSH。

  • plink和Pageant是PuTTY的一部分。该ssh命令是OpenSSH的一部分。目前尚不清楚Git使用的是哪个程序。您需要检查%GIT_SSH%环境变量。

  • 这些程序使用不同的代理协议。OpenSSH无法使用PuTTY的选美;它有自己的ssh-agent(不幸的是,在Windows上使用它有些复杂)。

  • PuTTY并将plink会话设置存储在注册表中,可在PuTTY的界面中进行编辑。他们不使用任何东西~/.ssh/。该目录仅由OpenSSH使用。

  • OpenSSH和PuTTY使用的私钥格式是不同的。您不能.ppk在OpenSSH中使用密钥。如果在PuTTYgen中生成了密钥,则必须使用其“导出→OpenSSH”命令。

    $ ssh -vvvT git@github.com
    OpenSSH_4.6p1, OpenSSL 0.9.8e 23 Feb 2007
    ...
    debug2: key_type_from_name: unknown key type 'PuTTY-User-Key-File-2:'
    

我知道其中的区别,并且如原始文章所述,git已设置为在安装时使用plink。我已验证这已将正确的环境变量更改为指向plink.exe。我想在git上使用PuTTY键(这在过去已经起作用了!),尽管使用了plink,但它却无法正常工作的事实很奇怪……
Radu 2012年

本质上,现在我可以使它与OpenSSH密钥一起使用,但不能与PuTTY密钥一起使用。我尝试重新安装PuTTY并生成新密钥。这似乎不是问题。知道会是什么吗?
Radu 2012年

1
@Radu:plink不支持OpenSSH密钥格式。如果您的版本支持,则不是plink您正在使用;这是另一回事。
grawity 2012年

1
@Radu:另外,原始帖子表示您的主张相反。首先,您使用PuTTYgen生成密钥并将其加载到Pageant,然后再配置OpenSSH,并抱怨“ ssh尽管已加载到Pageant中,仍提示输入口令”。您正在混淆这两个程序。
grawity 2012年

我从没说过plink支持OpenSSH-但是Git Bash确实支持,因为默认情况下它使用OpenSSH。回读,您是正确的,我一直感到困惑,因为正如您所说,~/.ssh/configPuTTY没有使用它。但是,我想重申GIT_SSH指向plink,但是,如果我修改OpenSSH的ssh配置文件,则在尝试连接到github时,更改会反映在Git Bash中。本质上,我认为GIT_SSH环境变量将被忽略,并且我认为它是我的操作系统特有的。明天我将尝试新的图像。
Radu 2012年

20

我整理了一个分步指南,使用PuTTY的Plink应用程序进行SSH身份验证来获取Windows的Git设置。

请按照以下步骤操作:


设定

  1. 安装在PuTTY下载页面上可用的putty.zip,或者您可以单独下载。

    • PuTTY: putty.exe(或通过FTP

      SSH和Telnet客户端本身。

    • Plink: plink.exe(或通过FTP

      PuTTY后端的命令行界面。

    • Pageant: pageant.exe(或通过FTP

      用于PuTTY,PSCP,PSFTP和Plink的SSH身份验证代理。

    • PuTTYgen: puttygen.exe(或通过FTP

      RSA和DSA密钥生成实用程序。

  2. 生成RSA和PPK密钥

    1. 使用Git Bash,用于ssh-keygen生成一对RSA公钥/私钥。有关如何执行此操作的更多信息,请参见官方的“ 生成SSH密钥”文章。
    2. 在PuTTYgen中,~/.ssh/id_rsa通过Conversions→ 导入您现有的(私有)密钥Import key
    3. 通过Save private key按钮将导入的密钥另存为~/.ssh/id_rsa.ppk
    4. 您现在应该在~/.ssh目录中具有以下键:

      • id_rsa专用(OpenSSH)RSA密钥
      • id_rsa.pub公用(OpenSSH)RSA密钥
      • id_rsa.ppk私钥(PuTTY)
  3. 安装Windows版Git

    确保选择使用Plink。

    Git设置

    注意:如果您已经安装了Git,则可以再次运行安装程序并将Plink设置为默认的SSH应用程序。

  4. 设置您的环境路径。

    1. 在“ 控制面板”中,导航到“系统”视图。
    2. 选择高级系统设置
    3. 在“ 系统属性”窗口中,单击“ 高级”选项卡。
    4. 点击Environment variables…
    5. 添加以下系统变量(如果尚未设置):

      • GIT_HOME C:\Program Files\Git
      • GIT_SSH C:\Program Files (x86)\PuTTY\plink.exe
    6. 将Git二进制目录追加到系统路径。

      • Path %Path%;%GIT_HOME%\bin
  5. 打开Pageant并加载位于的ppk密钥~/.ssh/id_rsa.ppk

    注意: Pageant启动后,您可以在右侧时间旁边的任务栏中的系统托盘中单击其图标。

  6. 打开Putty并连接以通过SSH测试您的连接,并将服务器的密钥添加为已知主机。

    油灰

    主机名示例:

    • GitHub:( git@github.com:22或通过ssh-agent ssh -Tv git@github.com
    • BitBucket :( git@bitbucket.org:22或通过ssh-agent ssh -Tv git@bitbucket.org
  7. 启动Git Bash。

    您应该能够从远程主机进行推入和拉出,而无需每次都输入密码。


捷径

您可以在启动目录中放置一个快捷方式,以在每次登录Windows帐户时自动加载密钥。

通过批处理脚本

这个想法的灵感来自对这个问题的答案:

超级用户:如何从CMD制作快捷方式?

REM |==================================================================|
REM | Pageant Autoload.bat                                             |
REM |                                                                  |
REM | This script creates a shortcut for auto-loading a PPK (key) in   |
REM | Pageant by writing a temporary VB script and executing it. The   |
REM | following information below is added to the shortcut.            |
REM |                                                                  |
REM | Filename  : Pageant Autoload                                     |
REM | Target    : pageant.exe                                          |
REM | Arguments : id_rsa.ppk                                           |
REM | Start in  : ~/.ssh                                               |
REM |==================================================================|
@echo off

REM |==================================================================|
REM | Global Values - Do not touch these!                              |
REM |==================================================================|
SET VBSCRIPT="%TEMP%\%RANDOM%-%RANDOM%-%RANDOM%-%RANDOM%.vbs"
SET STARTUP_DIR=Microsoft\Windows\Start Menu\Programs\Startup
SET STARTUP_USER_DIR=%APPDATA%\%STARTUP_DIR%
SET STARTUP_ALL_USERS_DIR=%PROGRAMDATA%\%STARTUP_DIR% REM Alternative

REM |==================================================================|
REM | Shortcut Values - You can change these to whatever you want.     |
REM |==================================================================|
SET FILENAME=Pageant Autoload.lnk
SET TARGET=%PROGRAMFILES(x86)%\PuTTY\pageant.exe
SET ARGUMENTS=id_rsa.ppk
SET START_IN=%%USERPROFILE%%\.ssh
SET DESCRIPTION=Autoload PuTTY key with Pageant on startup (Ctrl+Alt+S)
SET HOTKEY=CTRL+ALT+S

REM |==================================================================|
REM | Write a new VB script, on the fly; execute and delete it.        |
REM |==================================================================|
ECHO Set oWS = WScript.CreateObject("WScript.Shell") >> %VBSCRIPT%
ECHO sLinkFile = "%STARTUP_USER_DIR%\%FILENAME%" >> %VBSCRIPT%
ECHO Set oLink = oWS.CreateShortcut(sLinkFile) >> %VBSCRIPT%
ECHO oLink.TargetPath = "%TARGET%" >> %VBSCRIPT%
ECHO oLink.Arguments = "%ARGUMENTS%" >> %VBSCRIPT%
ECHO oLink.WorkingDirectory = "%START_IN%" >> %VBSCRIPT%
ECHO oLink.Description = "%DESCRIPTION%"  >> %VBSCRIPT%
ECHO oLink.HotKey = "%HOTKEY%" >> %VBSCRIPT%
ECHO oLink.Save >> %VBSCRIPT%
CScript //Nologo %VBSCRIPT%
DEL %VBSCRIPT% /f /q

通过Windows资源管理器

  1. 导航到Windows资源管理器中的启动目录。

    • 用户Startup/目录(首选)位于:

      %AppData%\Microsoft\Windows\Start Menu\Programs\Startup
      
    • 所有用户Startup/目录位于:

      %ProgramData%\Microsoft\Windows\Start Menu\Programs\Startup
      
  2. 在文件夹内右键单击,然后选择NewShortcut

  3. 在“ 创建快捷方式”对话框中,输入以下信息。

    • 位置: "C:\Program Files (x86)\PuTTY\pageant.exe"
    • 名称: Pageant Autoload
  4. 右键单击新的快捷方式,然后Properties从上下文菜单中选择。

  5. 在“ 快捷方式”选项卡下修改以下字段:

    • 目标: "%PROGRAMFILES(x86)%\PuTTY\pageant.exe" id_rsa.ppk
    • 开始于: %USERPROFILE%\.ssh

     
    笔记:

    1. 如果您使用的是32位Windows操作系统,则应使用%PROGRAMFILES%环境变量而不是%PROGRAMFILES(x86)%

    2. 如果将快捷方式放置在“所有用户”启动目录中,请确保当前用户id_rsa.ppk在其~/.ssh目录中具有密钥,否则该密钥将不会自动加载。


结束语

你有它。下次登录Windows配置文件时,将出现一个Pageant提示符,要求您输入密钥的密码。如果未在密钥上设置密码,则应该自动加载密钥,而不会出现提示。

如果不确定是否已加载密钥,请从系统托盘中的Pageant的上下文菜单中选择“ 查看密钥”,以查看 Pageant中的当前密钥。


3
很棒的详细说明!向我+1!
Pimp Juice IT

我缺少的链接是导入Puttygen中的私钥
Saurabh Kumar

必须在Putty中创建一个连接,以启用图片中设置过程中的步骤。
user46193

太棒了!我在gitlab.com上遇到了类似问题,并且此问题得以解决。Git使用的是腻子,而我上传的密钥是OpenSSH。谢谢!
jgalak

4

用简单的英语

debug3:不是RSA1密钥文件/c/Users/Radu/\.ssh\github.ppk。

debug2:key_type_from_name:未知的密钥类型'PuTTY-User-Key-File-2

的puttygen可以建立密钥的不同,Github上要SSH1,RSA(?,我在GitHub上SSH2键与佳丽)

新增

另请参阅有关调试 Github 选美问题的文章

>plink.exe -v -agent git@github.com
Looking up host "github.com"
Connecting to 207.97.227.239 port 22
Server version: SSH-2.0-OpenSSH_5.1p1 Debian-5github2
Using SSH protocol version 2
We claim version: SSH-2.0-PuTTY_Release_0.62
Doing Diffie-Hellman group exchange
Doing Diffie-Hellman key exchange with hash SHA-256
Host key fingerprint is:
ssh-rsa 2048 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48
Initialised AES-256 SDCTR client->server encryption
Initialised HMAC-SHA1 client->server MAC algorithm
Initialised AES-256 SDCTR server->client encryption
Initialised HMAC-SHA1 server->client MAC algorithm
Pageant is running. Requesting keys.
Pageant has 1 SSH-2 keys
Using username "git".
Trying Pageant key #0
Remote debug message: Forced command: gerve lazybadger
Remote debug message: Port forwarding disabled.
Remote debug message: X11 forwarding disabled.
Remote debug message: Agent forwarding disabled.
Remote debug message: Pty allocation disabled.
Authenticating with public key "github/lazybadger" from agent
Sending Pageant's response
Remote debug message: Forced command: gerve lazybadger
Remote debug message: Port forwarding disabled.
Remote debug message: X11 forwarding disabled.
Remote debug message: Agent forwarding disabled.
Remote debug message: Pty allocation disabled.
Access granted
Opened channel for session
Server refused to allocate pty
Started a shell/command
Hi lazybadger! You've successfully authenticated, but GitHub does not provide shell access.
Server sent command exit status 1
Disconnected: All channels closed

SSH1已过时,并且具有许多安全漏洞。Github不使用它。
grawity 2012年

不幸的是,github howto文档中缺少了与“ ssh -T git@github.com”相同的内容。感谢您的发表。
Epu,2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.