我生成了一个没有密码的 SSH 密钥对,并将公钥添加到 GitHub。
连接
user@dev:/var/www/project# ssh -T git@github.com
Hi User! You've successfully authenticated, but GitHub does not provide shell access.
成功了,当我重命名密钥时,它失败了。
但是当我想推送我的更改时,它仍然会询问我的用户名和密码组合。
有没有没有密码的推送方法?
https://github...
。它们还应遵循 git@github...
格式。
https://github.com/user/repo.git
2. SSH 类似 git@github.com:user/repo.git
如果它要求您输入用户名和密码,则您的源远程指向的是 HTTPS URL 而不是 SSH URL。
将其更改为 ssh。
例如,像 Git 这样的 GitHub 项目将有一个 HTTPS URL:
https://github.com/<Username>/<Project>.git
和 SSH 之一:
git@github.com:<Username>/<Project>.git
你可以做:
git remote set-url origin git@github.com:<Username>/<Project>.git
更改 URL。
如果您确实在使用 SSH URL,但在 git 推送时仍被要求输入用户名和密码:
git remote set-url origin git@github.com:<Username>/<Project>.git
您应该尝试使用以下方法进行故障排除:
ssh -vT git@github.com
下面是一段示例输出:
...
debug1: Trying private key: /c/Users/Yuci/.ssh/id_rsa
debug1: Trying private key: /c/Users/Yuci/.ssh/id_dsa
debug1: Trying private key: /c/Users/Yuci/.ssh/id_ecdsa
debug1: Trying private key: /c/Users/Yuci/.ssh/id_ed25519
debug1: No more authentication methods to try.
Permission denied (publickey).
其实我之前已经把公钥加到GitHub了,我本地也有私钥。但是,我的私钥有一个不同的名称,称为 /c/Users/Yuci/.ssh/github_rsa
。
根据示例输出,Git 正在尝试 /c/Users/Yuci/.ssh/id_rsa
,而我没有。因此,我可以简单地将 github_rsa
复制到同一目录中的 id_rsa
。
cp /c/Users/Yuci/.ssh/github_rsa /c/Users/Yuci/.ssh/id_rsa
现在,当我再次运行 ssh -vT git@github.com
时,我有:
...
debug1: Trying private key: /c/Users/Yuci/.ssh/id_rsa
debug1: Authentication succeeded (publickey).
...
Hi <my username>! You've successfully authenticated, but GitHub does not provide shell access.
...
现在我可以推送到 GitHub 而无需输入用户名和密码 :-)
ssh-add 'C:\Users\Yuci\.ssh\github_rsa'
之类的东西。
此外,对于要点,您似乎必须省略用户名
git remote set-url origin git@gist.github.com:<Project code>
像往常一样,创建一个 SSH 密钥并将公钥粘贴到 GitHub。将私钥添加到 ssh-agent。 (我假设这就是你所做的。)
要检查一切是否正确,请使用 ssh -T git@github.com
接下来别忘了修改远程点如下:
git remote set-url origin git@github.com:username/your-repository.git
您必须使用 SSH 版本,而不是 HTTPS。从存储库克隆时,复制带有 SSH 版本的链接,因为 SSH 易于使用并解决了所有访问问题。您可以为输入到您的帐户的每个 SSH 设置访问权限(如推送、拉取、克隆等...)
这是一个链接,它说明了为什么我们需要 SSH 以及如何使用它:一步一步
与提到的其他用户一样,您必须将其从使用 HTTPS 转换为 SSH。我没有看到端到端解决方案的答案。在 setting up the ssh keys 之后,执行(在您的本地计算机上):
$ git remote set-url origin git@github.com:username/your_repo.git # Convert HTTPS -> SSH
$ ssh-add ~/.ssh/id_rsa_github # add private github ssh key ssh-agent (assuming you have it already running)
$ git push
你做的一切都很好,但 git 仍然通过密码询问,这对我有用,在你当前项目的路径中执行下一个突击队:
~ ssh-add -K ~/.ssh/id_rsaYourIdRsa
将您的 SSH 私钥添加到 ssh-agent 并将您的密码存储在钥匙串中。如果您使用不同的名称创建了密钥,或者如果您要添加具有不同名称的现有密钥,请将命令中的 id_rsaYourIdRsa 替换为您的私钥文件的名称。
要使用 SSH,您必须使用 $ git remote add origin git@github.com:USERNAME/REPOSITORY.git
而不是 git remote add origin remote_repository_URL
。您可以使用 $ git remote -v
检查它,如果您看到以下格式的 2 行,它将正常工作:
origin git@github.com:username/repo-name.git (fetch)
origin git@github.com:username/repo-name.git (push)
使用命令行:
输入 ls -al ~/.ssh
以查看是否存在现有的 SSH 密钥。
在终端中显示:没有目录存在
然后生成一个新的 SSH 密钥
步骤1。
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
第2步。
Enter a file in which to save the key (/Users/you/.ssh/id_rsa): <here is file name and enter the key>
步骤 3。
Enter passphrase (empty for no passphrase): [Type a password]
Enter same passphrase again: [Type password again]
git remote set-url origin $(git remote show origin | grep "Fetch URL" | sed 's/ *Fetch URL: //' | sed 's/https:\/\/github.com\//git@github.com:/')