Gitpython ssh密码

时间:2015-07-04 21:12:42

标签: python git gitpython

我正在尝试将gitpython与IDE集成,但我在推送时遇到了一些问题。

remote_repo = self.repo.remotes[remote]
remote_repo.push(self.repo.active_branch.name)

当我运行此命令时,或只是

  git push --porcelain origin master

提示询问我的ssh密码。

Enter passphrase for key '/home/user/.ssh/id_rsa': 

我的问题是:

  • 提示可能会询问或不提供此密码
  • 如果需要密码,我需要一个跨平台解决方案

我该如何解决它并提供一个界面来识别是否需要密码,如果能够提供密码?

2 个答案:

答案 0 :(得分:1)

跨平台解决方案适合您launch first the ssh-agent并致电OLTP test statistics: queries performed: read: 358498 write: 0 other: 51214 total: 409712 transactions: 25607 (426.73 per sec.) deadlocks: 0 (0.00 per sec.) read/write requests: 358498 (5974.23 per sec.) other operations: 51214 (853.46 per sec.) Test execution summary: total time: 60.0074s total number of events: 25607 total time taken by event execution: 479.9015 per-request statistics: min: 7.50ms avg: 18.74ms max: 48.85ms approx. 95 percentile: 21.88ms Threads fairness: events (avg/stddev): 3200.8750/5.73 execution time (avg/stddev): 59.9877/0.00 有关钥匙串等其他替代方案,另请参阅“How can I run ssh-add automatically, without password prompt?”。

ssh-add

这将要求您提供密码,然后存储。

任何需要ssh私钥的后续ssh调用(使用gitpython或任何其他工具)都不需要输入私钥密码。

答案 1 :(得分:1)

如果您希望完全控制ssh连接的方式,并且使用git 2.3或更新版本,则可以使用GIT_SSH_COMMAND环境变量集实例化git。它指向一个名为的脚本的ssh。因此,您可以确定是否需要密码,并启动其他GUI以获得所需的输入。

在代码中,它看起来像这样:

remote_repo = self.repo.remotes[remote]

# here is where you could choose an executable based on the platform.
# Shell scripts might just not work plainly on windows.
ssh_executable = os.path.join(rw_dir, 'my_ssh_executable.sh')
# This permanently changes all future calls to git to have the given environment variables set
# You can pass additional information in your own environment variables as well.
self.repo.git.update_environment(GIT_SSH_COMMAND=ssh_executable)

# now all calls to git which require SSH interaction call your executable
remote_repo.push(self.repo.active_branch.name)

请注意,这仅适用于通过SSH访问资源。例如,如果协议是HTTPS,则无论如何都可能会提供密码提示。

在git 2.3之前,您可以使用GIT_SSH环境变量。它的工作方式不同,因为它只包含ssh程序的路径,其中将传递其他参数。当然,这可能是您的脚本,也类似于上面显示的。我想更准确地指出这两个环境变量之间的差异,但缺乏个人经验。