python - 如何在 Windows 子进程中通过 ssh 运行 git fetch

标签 python windows git github ssh

我有一些代码需要定期从 github 获取代码(在 Windows 机器上)。

当我手动 pull 时,我使用 GitBash,并且我已经为我检查的存储库运行了 ssh key ,所以一切都很好。但是,当我尝试在 python 子进程中运行相同的操作时,我没有 GitBash 提供的 ssh 服务,并且无法对存储库进行身份验证。

我应该如何从这里开始。我可以想到几个不同的选择:

  1. 我可以恢复使用 https://获取。这是有问题的,因为我正在获取的存储库使用两因素身份验证并且将在无人值守的情况下运行。有没有办法从命令行访问具有 2fa 的 https 存储库?

  2. 我尝试使用参数调用 sh.exe,这些参数将触发 ssh-agent,然后发出我的命令,以便一切都或多或少地按照 gitBash 中的方式运行,但这似乎并不工作:

    "C:\Program Files (x86)\Git\bin\sh.exe"  -c "C:/Program\ Files\ \(x86\)/Git/bin/ssh-agent.exe; C:/Program\ Files\ \(x86\)/Git/bin/ssh.exe -t git@github.com"
    

    产生

    SSH_AUTH_SOCK=/tmp/ssh-SiVYsy3660/agent.3660; export SSH_AUTH_SOCK;
    SSH_AGENT_PID=8292; export SSH_AGENT_PID;
    echo Agent pid 8292;
    Could not create directory '/.ssh'.
    The authenticity of host 'github.com (192.30.252.129)' can't be established.
    RSA key fingerprint is XXXXXXXXXXX
    Are you sure you want to continue connecting (yes/no)? yes
    Failed to add the host to the list of known hosts (/.ssh/known_hosts).
    Permission denied (publickey).
    
  3. 我可以使用Python中的ssh模块(如paramiko)来建立连接吗?在我看来,这只适用于 ssh'ing 到远程终端。有没有办法让它提供 git.exe 可以使用的 ssh 连接?

因此,如果有人以前做过此操作或有更好的选择,我将不胜感激

最佳答案

git bash 设置了 HOME 环境变量,它允许 git 查找 ssh key (在 %HOME%/.ssh 中)

您需要确保 python 进程具有或定义 HOME 到相同的路径。
正如“Python os.environ[“HOME”] works on idle but not in a script ”中所述,您需要将 HOME 设置为 %USERPROFILE% (或者,在 python 中,设置为 os.path.expanduser("~ “))。

关于python - 如何在 Windows 子进程中通过 ssh 运行 git fetch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26155367/

相关文章:

git - 全局 git 配置数据存储在哪里?

python - 检测何时单击 "X"按钮

windows - ERRORLEVEL与%ERRORLEVEL%与感叹号ERRORLEVEL感叹号

c++ - VC++ wcscpy_s 在 "Buffer is too small"上随机断言

c++ - 恢复中止的下载?

git - `git diff HEAD^` 的反义词是什么?

python - 如何在 python 对象中有效地使用 Session 来将 tensorflow 作为实现细节?

Python从文件中提取部分信息

Python Sympy 漂亮的矩阵输出

git - 如何一次 pull 所有分支 - 包括新创建的分支?