如何通过TortoisePlink和KeyRing让密码保护的PPK停止在TortoiseHG中输入密码

时间:2012-11-18 18:35:21

标签: mercurial ssh tortoisehg pageant

已解决,请参阅上一次修改

我有一个SourceForge存储库,我在那里正确设置了SSH密钥。它工作正常。但是当我使用TortoiseHG将我的修改推送到存储库时,我不断被要求输入我的PPK密码(因为我保护它)。

我告诉Mercurial我的PPK是这样的:

[UI] ssh = tortoiseplink.exe -ssh -i“c:\ Users \ my_user \ SSH \ my_user.ppk”

但它一直纠缠着PPK的密码。我知道Mercurial的KeyRing扩展,但它是否适用于PPK?

则...

TortoiseHG有这个Pageant工具。显然你通过指定-agent告诉TortoiseHG使用它,如下所示:

[UI] ssh = tortoiseplink.exe -ssh -i“c:\ Users \ my_user \ SSH \ my_user.ppk”-agent

我在Pageant中添加了我的键,但是当我与TortoiseHG同步时,仍然要求我PPK的密码,即使我已经提到过当我在Pageant中添加PPK时。

让我烦恼的另一件事是,Pageant会在程序重启时“忘记”所有键。所以它有点'无用。

任何方式我都可以使用KeyRing扩展来在TortoiseHG中添加我的PPK并将密码保存在某处?

如果没有办法解决这个问题,我想我只会使用一个不受保护的PPK,就是这样......

稍后编辑:

当我尝试通过如上配置的TortoiseHG Sync工具进行推送时,这是我得到的调试输出。

%hg --repository C:\ Projects \ MyProject push --debug ssh://echysttas@hg.code.sf.net/p/myproject/code

pushing to ssh://echysttas@hg.code.sf.net/p/myproject/code

running "c:\Program Files\TortoiseHg\TortoisePlink.exe" -agent echysttas@hg.code.sf.net "hg -R p/myproject/code serve --stdio"

sending hello command

sending between command

在这里我收到了一个密码请求,我取消了该请求,因为我不想继续重复密码

远程hg没有合适的回应 [命令返回代码255 Mon Nov 19 20:43:14 2012]

LATER EDIT 2:

我注意到一些示例使用plink.exe而不是TortoisePlink.exe。好吧,好吧,我也试过plink.exe(直接来自Putty网站)。这产生了有希望的结果......

sending hello command

sending between command

remote: Passphrase for key "rsa-key-20121118":

remote: Passphrase for key "rsa-key-20121118":

然而,它被困在这里。

LATER EDIT 3

非常有趣的发现:: - D.

它因为我从非高架资源管理器调用TortoiseHG Sync而陷入困境,但我从提升的Total Commander 开始了Pageant。我在Windows 7上使用UAC导致了这个问题。

如果Pageant是从admin-rights Total Commander运行的,那么还必须从那里启动TrtoiseHG Sync!如果这样做,它的工作原理!如果我从非高架资源管理器启动Pageant并且我也从那里进行同步,它也可以工作。

完成!

懒惰的獾我还在给你答案,因为你什么都懒,而且你证明了他的兴趣和兴趣。帮了我很多忙。虽然“它在我的机器上工作”并不是真正的答案,但它确实让我思考,你的许多话语和描述值得光荣的绿色复选标记,嗯? :d

1 个答案:

答案 0 :(得分:2)

嗯,我可以与选美合作,而不会被问到更多一次密码

我的ssh行

ssh = "c:\Program Files\_Tools\TortoiseHg\TortoisePlink.exe"

并且运行Pageant(带有加载的私钥/ PuTTY-User-Key-File /)将使我能够与repo进行通信而无需重新身份验证

注1:根据您的情况,Keyring无法提供帮助,使用pure-ssh连接调试分页功能(ssh或plink)

注2:要使用密钥启动Pageant(只需要密码),您可以使用扩展command-line

  

如果您在Pageant命令行上提供私钥,Pageant会在启动时自动加载一个或多个私钥。您的命令行可能如下所示:

     

C:\PuTTY\pageant.exe d:\main.ppk d:\secondary.ppk

     

如果密钥是加密存储的,Pageant会在启动时请求密码。

     

如果Pageant已在运行,则此语法会将键加载到现有的Pageant中。

附加

尝试使用我目前的TortoiseHG 2.6(XP SP3 x86)的ssh设置,Mercurial repo

c:\TEMP\Fiver>hg push sf
pushing to ssh://bigbadger@hg.code.sf.net/u/bigbadger/code
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 7 changesets with 39 changes to 19 files
remote: <Repository /hg/u/bigbadger/code> refresh queued.

本地回购hgrc

[paths]
...
sf = ssh://bigbadger@hg.code.sf.net/u/bigbadger/code

加载到Pageant中的私钥,在我的个人资料中注册的公钥

Mercurial.ini(相关部分)

[ui]
merge = <irrelevant>
username = <irrelevant>
ssh = "c:\Program Files\_Tools\TortoiseHg\TortoisePlink.exe"

(请注意没有TortoisePlink的其他参数)

没有 更特殊的已经完成

带有日志输出的纯THG推送的屏幕截图

Push

用于SF-SSH的良好plink +选美会话的日志

>Plink.exe -v -agent bigbadger@hg.code.sf.net
Looking up host "hg.code.sf.net"
Connecting to 216.34.181.156 port 22
Server version: SSH-2.0-OpenSSH_5.3
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 86:7b:1b:12:85:35:8a:b7:98:b6:d2:97:5e:96:58:1d
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 "bigbadger".
Trying Pageant key #0
Authenticating with public key "github/lazybadger" from agent
Sending Pageant's response
Access granted
Opened channel for session
Allocated pty (ospeed 38400bps, ispeed 38400bps)
Started a shell/command
Last login: Tue Nov 20 03:20:48 2012 from 85.249.33.17
Server sent command exit status 1
Disconnected: All channels closed

Welcome to hg.sourceforge.net
This is a restricted Shell Account
You cannot execute anything here.