在原始的 Windows 7 Enterprise 安装上:
- 安装PuTTY 0.62
- 使用 puttygen.exe 创建公钥/私钥对
- 将用于粘贴到 OpenSSH authorized_keys 的公钥添加到 github 帐户
- 将私钥添加到选美
- 使用以下选项安装 msysgit 1.7.8:
- 从 Windows 命令提示符使用 Git
- 使用(Tortoise)Plink 指向正确的 plink.exe
- 通过在 PuTTY 中连接到 github.com 并接受指纹,确保将 github 指纹添加到 know_hosts
编辑
~/.ssh/config
如下:Host github.com User git Hostname github.com PreferredAuthentications publickey IdentityFile ~\.ssh\github.ppk
ssh -vvvT [email protected]
给出:http://pastebin.com/Tu3Fc6nJ。请注意,尽管密码已成功加载到 pageant 中,但系统仍提示我输入密码。
我已经尝试过:chmod 700 ~/.ssh; chmod 600 ~/.ssh/*
从 Git Bash 内部,但是没有效果,经验证ls -l
。
我应该指出,我在之前的 Windows 7 安装中也使用了同样的设置。据我所知,一切都是相同的。
有效的方法是从 Git Bash 内部生成密钥。但是,我无法将这些密钥添加到 pageant 中,这非常麻烦。实际上,似乎任何使用 PuTTY 生成的密钥的尝试都是失败的。
根据日志,您能看出是什么原因导致此功能无法正常工作吗?提前致谢。
答案1
我已经整理了一份分步指南,以使用 PuTTY 的 Plink 应用程序进行 SSH 身份验证来为 Windows 设置 Git。
请继续关注以下内容:
设置
安装腻子可在PuTTY 下载页面或者您可以单独下载。
生成 RSA 和 PPK 密钥
- 使用 Git Bash
ssh-keygen
生成一对 RSA 公钥/私钥。有关如何执行此操作的更多信息,请参阅官方生成 SSH 密钥文章。 - 在 PuTTYgen 中,通过→导入您现有的
~/.ssh/id_rsa
(私钥)。ConversionsImport key - 通过按钮将导入的密钥保存Save private key为
~/.ssh/id_rsa.ppk
。 ~/.ssh
您的目录中现在应该有以下密钥:id_rsa
:私人(OpenSSH)RSA 密钥id_rsa.pub
:公共 (OpenSSH) RSA 密钥id_rsa.ppk
:私钥(PuTTY)
- 使用 Git Bash
-
确保您选择使用 Plink。
笔记:如果您已经安装了 Git,则只需再次运行安装程序并将 Plink 设置为默认 SSH 应用程序。
设置您的环境路径。
- 在控制面板,导航至系统视图。
- 选择高级系统设置。
- 在里面系统属性窗口中,单击先进的标签。
- 点击Environment variables…。
添加以下内容系统变量(如果尚未设置):
GIT_HOME
:C:\Program Files\Git
GIT_SSH
:C:\Program Files (x86)\PuTTY\plink.exe
将 Git 二进制目录附加到系统路径。
Path
:%Path%;%GIT_HOME%\bin
打开 Pageant 并加载位于 的 ppk 密钥
~/.ssh/id_rsa.ppk
。笔记:一旦 Pageant 启动,您可以单击位于任务栏右侧时间旁边的系统托盘中的图标。
打开 Putty 并连接以通过 SSH 测试您的连接,并将服务器的密钥添加为已知主机。
主机名示例:
- GitHub:
[email protected]:22
(或通过 ssh-agent )ssh -Tv [email protected]
- BitBucket:
[email protected]:22
(或通过 ssh-agent )ssh -Tv [email protected]
- GitHub:
启动 Git Bash。
您应该能够从远程主机推送和拉取数据,而无需每次都输入密码。
捷径
您可以在启动目录中放置一个快捷方式,以便每次登录 Windows 帐户时自动加载密钥。
通过批处理脚本
这个想法是受到这个问题的答案的启发:
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 资源管理器
在 Windows 资源管理器中导航到启动目录。
用户
Startup/
目录(首选)位于:%AppData%\Microsoft\Windows\Start Menu\Programs\Startup
所有用户
Startup/
目录位于:%ProgramData%\Microsoft\Windows\Start Menu\Programs\Startup
在文件夹内单击鼠标右键,然后选择New→Shortcut
在里面创建快捷方式对话框中,输入以下信息。
- 地点:
"C:\Program Files (x86)\PuTTY\pageant.exe"
- 姓名:
Pageant Autoload
- 地点:
右键单击新的快捷方式并Properties从上下文菜单中选择。
修改捷径标签:
- 目标:
"%PROGRAMFILES(x86)%\PuTTY\pageant.exe" id_rsa.ppk
- 开始于:
%USERPROFILE%\.ssh
笔记:如果您使用的是 32 位 Windows 操作系统,则应该使用
%PROGRAMFILES%
环境变量而不是%PROGRAMFILES(x86)%
。如果您将快捷方式放在所有用户启动目录中,请确保当前用户
id_rsa.ppk
在其~/.ssh
目录中有一个密钥,否则该密钥将不会自动加载。
- 目标:
结束语
就是这样。下次登录 Windows 配置文件时,您将看到 Pageant 提示,要求您输入密钥的密码。如果您没有为密钥设置密码,则密钥应该会自动加载,而无需提示。
如果你不确定你的密钥是否已加载,请通过选择查看 Pageant 中的当前密钥查看密钥从系统托盘中的 Pageant 上下文菜单中。
答案2
您混淆了两个完全独立的程序:PuTTY 和 OpenSSH。
plink
和 Pageant 是 PuTTY 的一部分。该ssh
命令是 OpenSSH 的一部分。目前还不清楚 Git 正在使用哪个程序;您需要检查%GIT_SSH%
环境变量。这些程序使用不同的代理协议;OpenSSH 不能使用 PuTTY 的 Pageant;它有自己的协议
ssh-agent
(不幸的是,在 Windows 上使用起来有点复杂)。PuTTY 并将
plink
会话设置存储在注册表中,可在 PuTTY 界面中编辑。它们不使用 中的任何内容~/.ssh/
;此目录仅由 OpenSSH 使用。OpenSSH 和 PuTTY 使用的私钥格式不同;您不能将
.ppk
密钥用于 OpenSSH。如果您在 PuTTYgen 中生成密钥,则必须使用其“导出 → OpenSSH”命令。$ ssh -vvvT [email protected] OpenSSH_4.6p1, OpenSSL 0.9.8e 23 Feb 2007 ... debug2: key_type_from_name: unknown key type 'PuTTY-User-Key-File-2:'
答案3
用简单的英语
debug3:不是 RSA1 密钥文件 /c/Users/Radu/\.ssh\github.ppk。
debug2:key_type_from_name:未知密钥类型'PuTTY-User-Key-File-2
Puttygen 可以构建不同的密钥,Github 需要 SSH1-RSA(?,我使用ssh2 密钥与 github 上的 Pageant 密钥)
添加
另请参阅关于调试选美的帖子Github 的问题
>plink.exe -v -agent [email protected]
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