我把我的工作推到一个远程git存储库。

每次推送都会提示我输入用户名和密码。我想避免它的每一个推送,但如何配置以避免它?


当前回答

我建议使用凭证管理器来存储GitHub凭证。使用git config——global credential。助手存储是不安全的,因为它以明文存储GitHub密码。 对于Linux, libsecret是一个很好的替代方案。对于Ubuntu和其他一些linux发行版,您可以执行以下操作:

安装:

sudo apt-get update
sudo apt install libsecret-1-0 libsecret-1-dev
sudo apt install gnome-keyring

创建

cd /usr/share/doc/git/contrib/credential/libsecret/
Sudo make 

配置git使用libsecret存储密码

git config --global credentail.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret

在此设置后输入一次密码后,git凭据将由libsecret存储。

其他回答

在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

如果你的电脑是安全的,或者你不关心密码安全,这可以很简单地实现。假设远程存储库位于GitHub上,origin是远程存储库的本地名称,请使用此命令

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

——push标志确保只更改git push命令的存储库URL。(在最初的帖子中问的问题只是关于git push命令。仅推送操作需要用户名+密码是GitHub上公共存储库的正常设置。注意,GitHub上的私有存储库也需要用户名+密码来进行拉取操作,所以对于私有存储库,你不会想要使用——push标志…)

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

你的ISP,或者任何记录你的网络访问的人,可以很容易地 在URL中以明文形式查看密码; 任何访问你电脑的人都可以使用git remote show origin查看你的密码。

这就是为什么使用SSH密钥是可以接受的答案。

即使是SSH密钥也不是完全安全的。例如,任何获得PC访问权限的人仍然可以进行推送操作,破坏你的存储库,或者更糟糕的是,对你的代码进行细微更改的推送提交。(所有推送提交在GitHub上明显可见。但是如果有人想偷偷地改变你的代码,他们可以在不改变提交消息的情况下修改之前的提交,然后强制推送。这将是隐秘的,在实践中很难被发现。)

但泄露密码更糟糕。如果攻击者获得了您的用户名+密码,他们可以做的事情,如锁定您自己的帐户,删除您的帐户,永久删除存储库等。


或者,为了简单和安全,你可以在URL中只提供你的用户名,这样你每次推送git时都需要输入你的密码,但你不必每次都提供你的用户名。(我很喜欢这种方法,每次git push时都需要输入密码,这样我就不会不小心git push了。)

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

使用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>

Use还应该指定缓存过期,

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

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

注意:凭据帮助程序将未加密的密码存储在本地磁盘上。

只需使用——repo选项git push命令。是这样的:

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

1. 生成SSH密钥

Linux -麦克

打开终端创建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到标记为“Key”的字段中。 如果您的存储库是由其他人管理的,请将您的id_rsa.pub交给管理员。 如果您的远程存储库由您的管理,您可以使用此命令,例如: scp ~ / . ssh / id_rsa。酒吧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的答案