我将自己的工作git push到远程Git存储库。

每个push都会提示我输入usernamepassword。我想在每次推送时都避免使用它,但是如何配置以避免它呢?

评论

此处提供答案:stackoverflow.com/questions/6565357/…

长话短说:对于github,只需遵循以下两个链接help.github.com/articles/generating-ssh-keys help.github.com/articles/changing-a-remote-s-url

对于bitbucket,请点击此链接

#1 楼

1.生成SSH密钥

Linux / Mac

打开终端以创建ssh密钥:

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


对于Windows

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


使用Putty Gen生成密钥
将密钥导出为开放的SSH密钥

以下是上述步骤中的腻子生成演练

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的回答

评论


我在ubuntu上运行了第1步和第2步,但仍然要求我提供u_id passwd。我还跑了:ssh -T git@github.com。还是一样。该怎么办?

–拉迪卡
15年1月7日在7:24

@Rads您是否尝试过Eric P的其他答案?

–吗?
2015年3月2日,下午1:48

@dialex他的意思是管理远程git存储库的人。

–竞拍者
15/12/22在11:40

git remote set-url origin git + ssh://git@github.com/username/reponame.git这个命令对我有帮助。

–人为智能
16年6月18日在0:09

这对我有用git remote set-url origin git@github.com:/username/projectname.git

–库尔特
19年4月11日在14:00

#2 楼

永久验证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小时)。
注意:凭据帮助程序将未加密的密码存储在本地磁盘上。

评论


谢谢。您能解释一下config命令的作用吗?我不知道为什么我第一次推送到仓库时甚至不要求我输入密码。

– HelloWorldNoMore
16年5月10日在21:06

@vivoconunxino可能是因为它本来就不安全。在git联机帮助页中:“使用此帮助程序会将未加密的密码存储在磁盘上,仅受文件系统权限保护。”

–cmaster-恢复莫妮卡
17年12月15日在15:33

该答案缺少有关存储凭证助手将密码未加密存储在磁盘上的警告。

–cmaster-恢复莫妮卡
17年12月15日在15:34

@DavidRTribble:设置为缓存吗?或删除相关文件,请参见git-scm.com/docs/git-credential-store

– serv-inc
19 Mar 29 '19 at 14:44

@DavidRTribble:更好:git config --unset credential.helper

– serv-inc
19年4月3日在8:11

#3 楼

如果您已经设置了SSH密钥,但仍收到密码提示,请确保您的回购URL的格式为

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


评论


这是在本地使用git init之后解决问题的原因,然后在GitHub网站上从新仓库中添加了远程后尝试推送。

– sheldonkreger
2014年12月27日在1:26

不知道为什么这不是接受的答案的一部分。谢谢!

– jwalk
16年1月15日在7:24

接受答案应由实际接受答案加此答案组成。

– Puce
16年1月16日在16:57

您可以省略“ git + ssh://”,而只需使用git@github.com/username/reponame.git

–伊万·舒廖夫(Ivan Shulev)
16年1月26日在15:11

@IvanShulev我最初没有git + ssh尝试过并且没有工作

–安东内洛
16 Dec 8'在12:59

#4 楼

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

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


评论


或者您可以默认使用git remote set-url origin https:// name:password@github.com/repo.git进行设置

–非循环
2012-09-14 10:08



我注意到将URL设置为仅一个name@github.com / .... git也可以工作,如果您不介意每次都被密码打乱的话。

–timday
20年4月1日在13:44

对于github用户,git push --repo https://github.com/Username/repo它没有.git扩展名即可工作

– Pe Dro
20年5月13日在7:45

#5 楼

无限期保存

您可以通过

git config credential.helper store


使用git-credential-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。您还需要使用“钥匙串”应用程序将凭据存储在“钥匙串”中。
如果您使用的是Windows,则可以安装一个名为“ Git Credential Manager for Windows”的帮助程序。这类似于上述的“ osxkeychain”帮助程序,但是使用Windows凭据存储来控制敏感信息。可以在https://github.com/Microsoft/Git-Credential-Manager-for-Windows中找到。 [重点是我的]



评论


对于Windows,credential.helper缓存不起作用。它应该是git config --global credential.helper wincred。

– Paulo Merson
19年7月17日在16:38

当您被迫使用https时,这将很有帮助。如果我使用ssh,则服务器上的git会挂起,因此我无法选择SSH密钥。

– Sridhar Sarnobat
19-10-21在18:24



#6 楼

我使用的是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"


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

步骤2-

创建文件后,将公共密钥id_rsa.pub添加到github帐户ssh部分。

步骤3-

在计算机上,使用以下命令将私钥id_rsa添加到ssh-agent

ssh-add ~/.ssh/id_rsa 


步骤4-

现在使用以下命令将远程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


就这样。

#8 楼

将您的git客户端连接到您的OS凭据存储。例如,在Windows中,您将凭据帮助程序绑定到wincred:

git config --global credential.helper wincred


在GitHub上使用https://时是否可以跳过密码输入?

#9 楼

在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


#10 楼

只是想指出一些有关上述解决方案的内容:

git config credential.helper store


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

#11 楼

运行以下命令为我解决了这个问题。

git config --global credential.helper wincred


请参考以下github文档:

https://help.github.com/articles/caching-your-github-password-in-git/


#12 楼

我使用了Pavel建议的答案,并且对我有用。我的区别是在添加遥控器时做到了:git remote add (alias) https://(name:password)@github.com/(the remote address).git

#13 楼

如果您的PC是安全的,或者您不关心密码的安全性,则可以非常简单地实现此目的。假设远程存储库位于GitHub上,并且origin是您的远程存储库的本地名称,请使用以下命令

git remote set-url --push origin https://<username>:<password>@github.com/<repo>


--push标志可确保更改存储库的URL仅用于git push命令。 (原始帖子中提出的问题仅与git push命令有关。仅对推操作要求用户名+密码是GitHub上公共存储库的常规设置。请注意,GitHub上的私有存储库也需要用户名+密码才能进行拉取和提取操作,因此对于私有存储库,您不希望使用--push flag ...)

警告:这本质上是不安全的,因为:


您的ISP,或记录您的网络访问权限的任何人都可以轻松
在URL中以纯文本格式查看密码;
任何有权访问您的PC的人都可以使用git remote show origin查看您的密码。

为什么使用SSH密钥是公认的答案。

即使SSH密钥也不是完全安全的。例如,任何可以访问您的PC的人仍然可以进行使您的存储库崩溃的推送,或者-更糟的是-推送提交会对代码进行微妙的更改。 (显然,所有推送的提交在GitHub上都是高度可见的。但是,如果有人想秘密更改您的代码,他们可以在不更改提交消息的情况下--amend进行先前的提交,然后强制推送。这在实践中是隐蔽的,很难注意到。)

但是透露密码更糟。如果攻击者了解您的用户名和密码,他们可以执行以下操作,例如将您锁定在自己的帐户之外,删除您的帐户,永久删除存储库等。


另外,为简单起见和安全起见,您只能在URL中提供用户名,这样您每次git push时都必须输入密码,而不必每次都提供用户名。 (我非常喜欢这种方法,每次输入git push时都必须输入密码,这让我有一个思考的时间,因此我不会偶然地输入git push。)

git remote set-url --push origin https://<username>@github.com/<repo>


评论


如果密码中有@,在git服务器中@之后会打破思考密码的命令怎么办?

–普拉纳夫·辛格(Pranav Singh)
18-4-20在7:52



如果您的密码包含“ @”,则表示您自己位于此处。您可以更改密码吗?

– radfast
18年4月22日在11:53



当我为具有服务帐户(不是个人)的持续集成进行自动化时,需要提出更改密码的请求。现在使用SSH密钥进行安全登录

–普拉纳夫·辛格(Pranav Singh)
18年4月23日在4:39

#14 楼

据我所知,只有两种安全的方法:使用密钥库对ssh或passwd进行加密。

SSH


登录github;
访问:https://github.com/settings/keys;
新的SSH键;

cat ~/.ssh/id_rsa.pub,将其粘贴在那里,命名并保存(如果没有这样的文件,请通过ssh-keygen -t rsa自己生成一个-只需输入所有提示即可);
转到本地存储库并通过git remote set-url origin git+ssh://git@github.com/username/reponame.git更新您的遥控器-您可以先通过git remote -v对其进行检查);
您只需在touch t; git add t; git commit -m "test"; git push处进行确认,然后确认是,即可享受无密码的世界。

passwd使用keystore

如果您只是像其他人一样使用git config --global credential.helper store,则未加密的密码将仅以纯文本格式存储在~/.git-credentials下,这听起来并不安全。

尝试将其加密为

sudo apt-get install libgnome-keyring-dev
sudo make --directory=/usr/share/doc/git/contrib/credential/gnome-keyring
git config --global credential.helper /usr/share/doc/git/contrib/credential/gnome-keyring/git-credential-gnome-keyring

git config --global credential.helper store



在这种情况下,您正在使用https://git@github.com/username/reponame.git


#15 楼

Windows上的“我的解决方案”:


右键单击目录以推送并选择“ Git Bash Here”。

ssh-keygen -t rsa(按Enter键输入所有值)
检查终端是否存在:Your public key has been saved in /c/Users/<your_user_name_here>/.ssh/id_rsa.pub

从指定文件复制公共密钥。
转到您的GitHub个人资料=>设置=> SSH和GPG密钥=>新的SSH密钥=>粘贴您的SSH密钥那里=>保存


#16 楼

所有这些都是因为git在clone / pull / push / fetch命令中没有提供通过管道发送凭据的选项。尽管它提供了credential.helper,但它存储在文件系统上或创建守护程序等。通常,GIT的凭据是系统级别的凭据,确保它们安全的责任在于调用git命令的应用程序。确实非常不安全。

这就是我要解决的问题。
1。 Git版本(git --version)应该大于或等于1.8.3。

GIT CLONE

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

然后按照下一节中的说明清除密码存储库。

插入

现在,这将消失,并且


将密码写成git remote origin。键入“ git remote -v”以查看损坏。通过设置不带密码的远程原始URL来更正此问题。 “ git remote set_url起源http:// {myuser} @ {my_repo_ip_address} / {myrepo_name.git}”
在存储库中的.git / logs中写入了密码。使用unix命令替换所有pwd实例,例如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。如果必须使用Runtime,请使用getRunTime()。exec,它将String数组作为参数,以/ bin / bash和-c作为参数,而不是将单个String作为参数的变量。

GIT FETCH / PULL / PUSH


将git remote url中的密码设置为:“ git remote set_url origin http:// {myuser}:{mypwd} @ {my_repo_ip_address} / {myrepo_name.git}”
发出命令git fetch / push / pull。然后将不会提示您输入密码。
按照上一节所述进行清除。不要错过。


#17 楼

您必须设置SSH私钥,您可以查看此页面,以及如何在Mac上进行设置;如果您使用的是Linux,则该指南应几乎相同,而在Windows上,则需要MSYS之类的工具。

#18 楼

似乎至少在Windows上使用TortoiseGIT时,可以使用以下方法创建SSH密钥并将其传输到GIT服务器:

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