无法在 Github 上为 pip install git+ssh 指定密钥文件
Can't Specify keyfile for pip install git+ssh on Github
我似乎无法从 github pip 安装私有存储库,而且我很确定我已经将问题追溯到密钥文件。复杂的因素是我的 ~/.ssh 目录中有几十个密钥文件,当我尝试指定特定的密钥文件时它似乎不起作用。对于 pip install,无论我的语法如何,它都会选择第一个密钥文件。
安装 repo1 有效,包括当不存在这样的密钥文件或指定了错误的密钥文件时:
> pip install git+ssh://git@github.com/username/repo1.git
> pip install --cert ~/.ssh/keyfile1 git+ssh://git@github.com/username/repo1.git
> pip install --cert ~/.ssh/keyfile1_BLAH_NO_SUCH_FILE git+ssh://git@github.com/username/repo1.git
> pip install --client-cert ~/.ssh/keyfile1 git+ssh://git@github.com/username/repo1.git
> pip install --client-cert ~/.ssh/keyfile1_BLAH_NO_SUCH_FILE git+ssh://git@github.com/username/repo1.git
> pip install --client-cert ~/.ssh/keyfile2 git+ssh://git@github.com/username/repo1.git
无论语法如何,安装 repo2 都不起作用:
> pip install git+ssh://git@github.com/username/repo2.git
> pip install --cert ~/.ssh/keyfile2 git+ssh://git@github.com/username/repo2.git
> pip install --client-cert ~/.ssh/keyfile2 git+ssh://git@github.com/username/repo2.git
我可以通过这样做来验证密钥文件是否正确并被 Github 识别:
> ssh -T git@github.com
Hi username/repo1! You've successfully authenticated, but GitHub does not provide shell access.
> ssh -T git@github.com -i ~/.ssh/keyfile1
Hi username/repo1! You've successfully authenticated, but GitHub does not provide shell access.
> ssh -T git@github.com -i ~/.ssh/keyfile2
Hi username/repo2! You've successfully authenticated, but GitHub does not provide shell access.
如果未指定或指定不正确的密钥文件,我可以验证是否使用了 keyfile1:
> ssh -T git@github.com -i ~/.ssh/keyfile1_BLAH_NO_SUCH_FILE
Warning: Identity file keyfile1_BLAH_NO_SUCH_FILE not accessible: No such file or directory.
Hi username/repo1! You've successfully authenticated, but GitHub does not provide shell access.
> ssh -T git@github.com
Hi username/repo1! You've successfully authenticated, but GitHub does not provide shell access.
所以我认为这告诉我 keyfile2 是好的。
为了消除 repo2 出现问题的可能性,我将 keyfile1 移到了 github 中的 repo2,然后 repo2 是我唯一可以 pip 安装的存储库。
因此,我的 pip install 语法似乎只适用于第一个密钥文件,因为它首先找到它,而且我要么错误地指定了密钥文件,要么我的规范被忽略了。
点 20.2.4
有什么想法吗?
选项 --cert
and --client-cert
仅用于 HTTPS,从未用于 git+ssh
协议。 pip
实际上没有办法将 SSH 密钥传递给 git
。您必须通过配置 git
或 ssh
.
来传递它
您可以尝试使用the trick with multiple Github accounts in ~/.ssh/config
。
或者您可以使用 GIT_SSH_COMMAND
环境变量并传递密钥:
GIT_SSH_COMMAND='ssh -i ~/.ssh/keyfile2' pip install git+ssh://git@github.com/username/repo2.git
从今天开始(pip 19.3.1),pip install 可以使用开箱即用的 ssh 密钥。
ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
pip install git+ssh://git@github.com/username/myprivaterepo.git@branch
(假设键~/.ssh/id_rsa.pub
已经添加到github)
我似乎无法从 github pip 安装私有存储库,而且我很确定我已经将问题追溯到密钥文件。复杂的因素是我的 ~/.ssh 目录中有几十个密钥文件,当我尝试指定特定的密钥文件时它似乎不起作用。对于 pip install,无论我的语法如何,它都会选择第一个密钥文件。
安装 repo1 有效,包括当不存在这样的密钥文件或指定了错误的密钥文件时:
> pip install git+ssh://git@github.com/username/repo1.git
> pip install --cert ~/.ssh/keyfile1 git+ssh://git@github.com/username/repo1.git
> pip install --cert ~/.ssh/keyfile1_BLAH_NO_SUCH_FILE git+ssh://git@github.com/username/repo1.git
> pip install --client-cert ~/.ssh/keyfile1 git+ssh://git@github.com/username/repo1.git
> pip install --client-cert ~/.ssh/keyfile1_BLAH_NO_SUCH_FILE git+ssh://git@github.com/username/repo1.git
> pip install --client-cert ~/.ssh/keyfile2 git+ssh://git@github.com/username/repo1.git
无论语法如何,安装 repo2 都不起作用:
> pip install git+ssh://git@github.com/username/repo2.git
> pip install --cert ~/.ssh/keyfile2 git+ssh://git@github.com/username/repo2.git
> pip install --client-cert ~/.ssh/keyfile2 git+ssh://git@github.com/username/repo2.git
我可以通过这样做来验证密钥文件是否正确并被 Github 识别:
> ssh -T git@github.com
Hi username/repo1! You've successfully authenticated, but GitHub does not provide shell access.
> ssh -T git@github.com -i ~/.ssh/keyfile1
Hi username/repo1! You've successfully authenticated, but GitHub does not provide shell access.
> ssh -T git@github.com -i ~/.ssh/keyfile2
Hi username/repo2! You've successfully authenticated, but GitHub does not provide shell access.
如果未指定或指定不正确的密钥文件,我可以验证是否使用了 keyfile1:
> ssh -T git@github.com -i ~/.ssh/keyfile1_BLAH_NO_SUCH_FILE
Warning: Identity file keyfile1_BLAH_NO_SUCH_FILE not accessible: No such file or directory.
Hi username/repo1! You've successfully authenticated, but GitHub does not provide shell access.
> ssh -T git@github.com
Hi username/repo1! You've successfully authenticated, but GitHub does not provide shell access.
所以我认为这告诉我 keyfile2 是好的。
为了消除 repo2 出现问题的可能性,我将 keyfile1 移到了 github 中的 repo2,然后 repo2 是我唯一可以 pip 安装的存储库。
因此,我的 pip install 语法似乎只适用于第一个密钥文件,因为它首先找到它,而且我要么错误地指定了密钥文件,要么我的规范被忽略了。
点 20.2.4
有什么想法吗?
选项 --cert
and --client-cert
仅用于 HTTPS,从未用于 git+ssh
协议。 pip
实际上没有办法将 SSH 密钥传递给 git
。您必须通过配置 git
或 ssh
.
您可以尝试使用the trick with multiple Github accounts in ~/.ssh/config
。
或者您可以使用 GIT_SSH_COMMAND
环境变量并传递密钥:
GIT_SSH_COMMAND='ssh -i ~/.ssh/keyfile2' pip install git+ssh://git@github.com/username/repo2.git
从今天开始(pip 19.3.1),pip install 可以使用开箱即用的 ssh 密钥。
ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
pip install git+ssh://git@github.com/username/myprivaterepo.git@branch
(假设键~/.ssh/id_rsa.pub
已经添加到github)