我正在尝试将gitpython与IDE集成,但我在push方面遇到了一些问题。
remote_repo = self.repo.remotes[remote]
remote_repo.push(self.repo.active_branch.name)当我运行这个命令,或者只是
git推送-瓷器起源大师
提示询问我的ssh密码。
Enter passphrase for key '/home/user/.ssh/id_rsa': 我的问题是:
我如何解决这个问题,并提供一个接口来识别是否需要密码,如果需要,则能够提供密码。
发布于 2015-07-05 06:36:42
如果您希望完全控制如何建立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,则可能会提供密码提示。
在GIT2.3之前,您可以使用GIT_SSH环境变量。它的工作方式不同,因为它只包含到ssh程序的路径,而附加参数将传递给该路径。当然,这也可能是您的脚本,类似于上面所示。我想更准确地指出这两个环境变量之间的差异,但我缺乏这样做的个人经验。
发布于 2015-07-05 04:03:02
跨平台解决方案是为您提供ssh-agent并调用ssh-add。
还请参阅"How can I run ssh-add automatically, without password prompt?“以获得其他替代方案,如密钥链。
if [ -z "$SSH_AUTH_SOCK" ] ; then
eval `ssh-agent -s`
ssh-add
fi它会向你要密码,然后储存起来。
任何后续的ssh调用,如果需要ssh私钥(使用gitpython或任何其他工具),都不需要输入私钥密码。
https://stackoverflow.com/questions/31225140
复制相似问题