Git推送:用户名,密码,如何避免?

git push我的工作git push到一个远程的Git仓库。

push都会提示我inputusernamepassword 。 我想避免它的每一个推,但如何configuration,以避免它?

1.生成一个SSH密钥

Linux的/苹果机

打开terminal来创buildssh密钥:

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

对于Windows

(只有在提交程序能够使用证书/私人和公共ssh密钥的情况下才有效)

  1. 使用腻子Gen来生成一个密钥
  2. 将密钥导出为开放的SSH密钥

以上是关于上述步骤的putty gen的演练

2.将SSH密钥与远程存储库相关联

这一步有所不同,这取决于你的遥控器的设置。

  • 如果它是一个GitHub存储库,并且您有pipe理权限,请转到设置并单击“添加SSH密钥”。 将你的~/.ssh/id_rsa.pub的内容~/.ssh/id_rsa.pub到标有'Key'的字段中。

  • 如果您的存储库由其他人pipe理,请给pipe理员您的id_rsa.pub

3.将您的远程URL设置为支持SSH的表单1

如果您已经完成了上述步骤并仍然收到密码提示,请确保您的repourl在表单中

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

而不是

 https://github.com/username/reponame.git 

要查看您的repourl,请运行:

 git remote show origin 

您可以更改url:

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

[1]这部分包含了Eric P的答案

使用Git存储库进行永久身份validation,

运行以下命令启用凭证caching。

 $ 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> 

使用时还应该指定caching过期

 git config --global credential.helper 'cache --timeout 7200' 

启用凭证caching后,它将被caching7200秒(2小时)

如果您已经设置了SSH密钥并仍然收到密码提示,请确保您的repourl在表单中

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

而不是

 https://github.com/username/reponame.git 

要查看您的repourl,请运行:

 git remote show origin 

您可以使用git remote set-url来更改url,如下所示:

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

只需使用--repo选项为git push命令。 喜欢这个:

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

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

 git@github.com:org/repo.git 

切换解决了我的问题!

无限期地保存

你可以通过git-credential-store来使用

 git config credential.helper store 

将您的密码存储在磁盘上。

超时

使用默认存储密码15分钟的git-credential-cache 。

 git config credential.helper cache 

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

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

将您的git客户端连接到您的操作系统凭证存储区。 例如在Windows中,将凭证助手绑定到wincred:

 git config --global credential.helper wincred 

在GitHub上使用https://时,有没有办法跳过密码input?

我用了帕维尔build议的答案,它对我有用。 我的区别是,当我添加远程像这样做: git remote add (alias) https://(name:password)@github.com/(the remote address).git

所有这些都是因为git没有在clone / pull / push / fetch命令中提供一个通过pipe道发送证书的选项。 虽然它提供了credential.helper,但它存储在文件系统上或者创build一个守护进程等等。通常,GIT的凭证是系统级别的凭证,因此保证它们安全的是在调用git命令的应用程序上。 确实非常不安全。

这是我必须解决的。 1. Git版本(git –version)应该大于或等于1.8.3。

GIT克隆

对于克隆,在将URL从格式http:// {myuser} @ {my_repo_ip_address} / {myrepo_name.git}更改为http:// {myuser}:{mypwd} @ {my_repo_ip_address}之后,请使用“git clone URL” /{myrepo_name.git}

然后清除密码的存储库,如下一节所述。

清洗

现在,这将会消失

  1. 把密码写在git remote origin中。 input“git remote -v”来查看损坏情况。 通过设置无密码的远程原始URL来纠正此问题。 “git remote set_url origin http:// {myuser} @ {my_repo_ip_address} / {myrepo_name.git}”
  2. 将密码写入存储库中的.git / logs中。 使用unix命令replacepwd的所有实例,例如find .git / logs -exec sed -i's / {my_url_with_pwd} // g'{} \; 在这里,{my_url_with_pwd}是带有密码的url。 由于该URL有正斜杠,因此需要用两个反斜杠来转义。 例如,对于URL http:// kris:passs123@192.168.0.1/proj.git – > http:\\ / \\ / kris:passs123@192.168.0.1 \\ / proj.git

如果您的应用程序使用Java来发出这些命令,请使用ProcessBuilder而不是Runtime。 如果必须使用运行时,请使用getRunTime()。exec,它以String数组作为参数,使用/ bin / bash和-c作为参数,而不是以单个String作为参数的参数。

GIT FETCH / PULL / PUSH

  1. 在git远程URL中设置密码为:“git remote set_url origin http:// {myuser}:{mypwd} @ {my_repo_ip_address} / {myrepo_name.git}”
  2. 发出git fetch / push / pull命令。 您将不会被提示input密码。
  3. 按上一节所述进行清洗。 不要错过。

我在Windows上的解决scheme:

  1. 右键点击目录按下并select“Git Bash Here”。
  2. ssh-keygen -t rsa (按input所有值)
  3. 检查terminal: Your public key has been saved in /c/Users/<your_user_name_here>/.ssh/id_rsa.pub
  4. 从指定的文件复制公钥。
  5. 转到您的GitHubconfiguration文件=>设置=> SSH和GPG键=>新的SSH密钥=>在那里粘贴您的SSH密钥=>保存

你必须设置一个SSH私钥,你可以查看这个页面 ,如何在Mac上进行设置,如果你在Linux上的指南应该是几乎相同的,在Windows上你需要像MSYS这样的工具。

步骤1 –

使用下面的命令在你的linux系统上创buildSSH密钥

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

它会询问密码和文件名(默认是〜/ .ssh / id_rsa,〜/ .ssh / id_rsa.pub)

第2步 –

一旦创build的文件添加到github帐户SSH部分的公钥id_rsa.pub。

步骤3 –

在你的机器上使用下面的命令将私钥id_rsa添加到ssh-agent

 ssh-add ~/.ssh/id_rsa 

步骤4 –

现在使用下面的命令将远程URL git@github.com:user_name / repo_name.git添加到您的本地git仓库。

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

而已。

显然,至less在Windows上使用TortoiseGIT时,可以创buildSSH密钥并使用简单的方法将它们传输到GIT服务器:

 > ssh-keygen.exe > ssh-copy-id [username]@[GIT_server] 

在Windows操作系统上使用这个,这对我有用:

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

例如

 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