我该如何避免每次git push时都要指定用户名和密码的规范要求?

412

我会使用 git push 将我的工作推送到远程 Git 仓库。

每次 push 都会提示我输入用户名密码。我想避免每次推送时都需要输入它们,但要如何配置才能避免呢?


6
这里有一个答案:https://dev59.com/nmw15IYBdhLWcg3whMA1Git push需要用户名和密码。 - kbdjockey
3
简而言之:对于 GitHub,只需跟随以下两个链接 https://help.github.com/articles/generating-ssh-keys 和 https://help.github.com/articles/changing-a-remote-s-url。 - JRun
请访问以下链接了解如何为Bitbucket设置SSH:https://confluence.atlassian.com/bitbucket/set-up-ssh-for-git-728138079.html - JDP
这个回答解决了你的问题吗?Git push需要用户名和密码 - T.Todua
20个回答

447

1. 生成SSH密钥

Linux/Mac

打开终端创建SSH密钥:

cd ~                 #Your home directory
ssh-keygen -t rsa    #Press enter for all values

对于Windows系统

(仅当提交程序能够使用证书/私钥和公钥时才有效)

  1. 使用Putty Gen生成密钥
  2. 将密钥导出为开放式SSH密钥

这里是一个关于putty gen的步骤演示

2. 将SSH密钥与远程仓库关联

此步骤因远程设置而异。

  • 如果是GitHub仓库且您有管理权限,请转到设置并单击“添加SSH密钥”。将~/.ssh/id_rsa.pub的内容复制到标记为“密钥”的字段中。

  • 如果您的仓库由其他人管理,请将您的id_rsa.pub提供给管理员。

  • 如果您的远程仓库由您管理,您可以使用以下命令:

    scp ~/.ssh/id_rsa.pub YOUR_USER@YOUR_IP:~/.ssh/authorized_keys/id_rsa.pub

3. 将远程URL设置为支持SSH的形式 1

如果您已完成上述步骤但仍然收到密码提示,请确保您的仓库URL的形式为

git+ssh://git@github.com/username/reponame.git

与...相对应
https://github.com/username/reponame.git

为了查看您的仓库URL,请运行以下命令:
git remote show origin

您可以使用以下方法更改URL:

git remote set-url origin git+ssh://git@github.com/username/reponame.git

[1] 本节内容包含Eric P的答案。


3
我在Ubuntu上执行了第一步和第二步,但仍然要求我输入u_id密码。我也运行了:ssh -T git@github.com。仍然是同样的情况。该怎么办? - Radhika
4
你尝试过另一个回答吗,即由 Eric P 提供的答案? - yo'
2
@dialex 他指的是负责管理远程Git仓库的人。 - selalerer
7
这个命令对我很有帮助:git remote set-url origin git+ssh://git@github.com/用户名/仓库名.git。 - ArtificiallyIntelligence
2
这对我有用:git remote set-url origin git@github.com:/username/projectname.git - Kurt
显示剩余12条评论

221

永久验证Git仓库身份

运行以下命令以启用凭证缓存。

$ git config credential.helper store
$ git push https://github.com/repo.git

Username for 'https://github.com': <USERNAME>
Password for 'https://USERNAME@github.com': <PASSWORD>
使用者应该指定缓存过期时间。
git config --global credential.helper 'cache --timeout 7200'

启用凭据缓存后,将缓存7200秒(2小时)

注意:凭据助手会在本地磁盘上存储未加密的密码。


4
可以,请问"config"命令是做什么的?我想知道为什么第一次向仓库推送时它甚至没有要求我输入密码。 - HelloWorldNoMore
2
@vivoconunxino 可能是因为它本质上是不安全的。从 git 的手册中可以看到:“使用此助手将会在磁盘上以未加密的形式存储您的密码,仅受文件系统权限保护。” - cmaster - reinstate monica
32
这个回答缺少一条警告,提醒使用 store 凭据助手时会将密码明文存储在磁盘上。 - cmaster - reinstate monica
3
更好的写法是:git config --unset credential.helper - serv-inc
1
@Milan man git-credential-store 列出文件 ~/.git-credentialsXDG_CONFIG_HOME/git/credentials,顺序如上。附注:“使用此助手将会在磁盘上以未加密的形式存储您的密码,仅受文件系统权限保护。” - cmaster - reinstate monica
显示剩余5条评论

128
如果您已经设置了SSH密钥,但仍然收到密码提示,请确保您的存储库网址是以下形式。
git+ssh://git@github.com/username/reponame.git
与...相对
https://github.com/username/reponame.git

要查看您的仓库URL,请运行:

git remote show origin

你可以使用 git remote set-url 来更改URL,方法如下:

git remote set-url origin git+ssh://git@github.com/username/reponame.git

太棒了,解决了我的问题。 - Rich
1
不确定为什么这不是被接受答案的一部分。谢谢! - jwalk
1
被接受的答案应由实际被接受的答案和此答案组成。 - Puce
3
可以省略 "git+ssh://",直接使用 git@github.com/username/reponame.git - Ivan Shulev
1
@IvanShulev 我最初尝试了没有使用git+ssh,但是没有成功。 - Antonello
显示剩余2条评论

42

只需在git push命令中使用--repo选项。像这样:

$ git push --repo https://name:password@bitbucket.org/name/repo.git

42
你可以使用 git remote set-url origin https://name:password@github.com/repo.git 命令将其默认设置为此。 - ACyclic
我注意到只把URL设置为name@github.com/....git也可以,如果你不介意每次都要输入密码的话。 - timday
对于 GitHub 用户来说,git push --repo https://github.com/Username/repo 可以在不加 .git 扩展名的情况下正常工作。 - Pe Dro

34

无限期保存

您可以通过git-credential-store进行操作。

git config credential.helper store

该程序在文件系统中未加密存储您的密码:

使用此助手将以未加密形式将您的密码存储在磁盘上,仅由文件系统权限进行保护。如果这不是可接受的安全折衷,请尝试使用git-credential-cache,或查找与操作系统提供的安全存储集成的助手。

设置超时时间

请使用git-credential-cache,默认情况下会将密码存储15分钟。

git config credential.helper cache

要设置不同的超时时间,请使用--timeout(这里是5分钟)

git config credential.helper 'cache --timeout=300'

永久安全存储 (适用于 OS X 和 Windows)

  • 如果您使用的是 Mac,Git 自带一个“osxkeychain”模式,可以将凭据缓存在附加到您系统账户的安全钥匙串中。这种方法将凭据存储在磁盘上,它们永远不会过期,但是使用与存储 HTTPS 证书和 Safari 自动填充相同的系统进行加密。在命令行上运行以下内容即可启用此功能:git config --global credential.helper osxkeychain。您还需要使用 Keychain 应用程序将凭据存储在 Keychain 中。
  • 如果您使用的是 Windows,则可以安装一个名为“Git Credential Manager for Windows”的助手。这类似于上述描述的“osxkeychain”助手,但使用 Windows 凭据存储来控制敏感信息。它可以在https://github.com/Microsoft/Git-Credential-Manager-for-Windows 上找到。[强调我的]

1
对于 Windows 系统,credential.helper cache 是无效的。正确的命令应该是 git config --global credential.helper wincred - Paulo Merson
2
当你被迫使用https时,这非常有帮助。如果我使用ssh,我的服务器上的git会挂起,因此我没有SSH密钥选项。 - Sridhar Sarnobat

8
我使用的是https链接(https://github.com/org/repo.git)而不是ssh链接。
git@github.com:org/repo.git  

转换解决了我的问题!

7

步骤1 -

使用以下命令在您的Linux系统上创建SSH密钥

ssh-keygen -t rsa -b 4096 -C "your_email"

步骤1 -

它会要求输入密码短语和文件名(默认为~ / .ssh / id_rsa,~ / .ssh / id_rsa.pub)。

步骤2 -

一旦创建了公钥和私钥文件,请将公钥id_rsa.pub添加到Github帐户的ssh部分。

步骤3 -

在您的计算机上,使用以下命令向ssh代理添加私钥id_rsa。

ssh-add ~/.ssh/id_rsa 

第四步 -

现在使用以下命令将远程URL git@github.com:user_name/repo_name.git 添加到本地git repo中。

git remote remove origin
git remote add origin git@github.com:user_name/repo_name.git

这就是它。


7
在Windows操作系统上,请使用以下内容,这对我有用:

在Windows操作系统上使用此命令,这对我有用:

https://{Username}:{Password}@github.com/{Username}/{repo}.git

e.g.

git clone https://{Username}:{Password}@github.com/{Username}/{repo}.git

git pull https://{Username}:{Password}@github.com/{Username}/{repo}.git

git remote add origin https://{Username}:{Password}@github.com/{Username}/{repo}.git

git push origin master

5

我想指出上面多次提到的解决方案中的一些问题:

git config credential.helper store

在此之后,您可以使用任何需要密码的命令,无需推送(例如,您也可以拉取)。在此之后,您将不需要再次输入用户名/密码。

5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接