Git推送:用户名,密码,如何避免?
我git push
我的工作git push
到一个远程的Git仓库。
每push
都会提示我inputusername
和password
。 我想避免它的每一个推,但如何configuration,以避免它?
1.生成一个SSH密钥
Linux的/苹果机
打开terminal来创buildssh密钥:
cd ~ #Your home directory ssh-keygen -t rsa #Press enter for all values
对于Windows
(只有在提交程序能够使用证书/私人和公共ssh密钥的情况下才有效)
- 使用腻子Gen来生成一个密钥
- 将密钥导出为开放的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}
然后清除密码的存储库,如下一节所述。
清洗
现在,这将会消失
- 把密码写在git remote origin中。 input“git remote -v”来查看损坏情况。 通过设置无密码的远程原始URL来纠正此问题。 “git remote set_url origin http:// {myuser} @ {my_repo_ip_address} / {myrepo_name.git}”
- 将密码写入存储库中的.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
- 在git远程URL中设置密码为:“git remote set_url origin http:// {myuser}:{mypwd} @ {my_repo_ip_address} / {myrepo_name.git}”
- 发出git fetch / push / pull命令。 您将不会被提示input密码。
- 按上一节所述进行清洗。 不要错过。
我在Windows上的解决scheme:
- 右键点击目录按下并select“Git Bash Here”。
-
ssh-keygen -t rsa
(按input所有值) - 检查terminal:
Your public key has been saved in /c/Users/<your_user_name_here>/.ssh/id_rsa.pub
- 从指定的文件复制公钥。
- 转到您的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