如何避免在每次git推送时指定用户名和密码?

时间:2011-12-21 11:01:07

标签: git github git-push

git push我的工作是远程Git存储库。

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

20 个答案:

答案 0 :(得分:285)

1。生成SSH密钥

的Linux / Mac的

打开终端以创建ssh密钥:

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

对于Windows

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

  1. 使用Putty Gen生成密钥
  2. 将密钥导出为打开的SSH密钥
  3. 这是上面步骤的putty gen walkthrough

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

    此步骤因遥控器的设置方式而异。

    • 如果它是GitHub存储库并且您具有管理权限,请转到settings并单击“添加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

    的表单

    如果您已完成上述步骤并仍在获取密码提示,请确保您的repo网址格式为

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

    而不是

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

    要查看您的回购网址,请运行:

    git remote show origin
    

    您可以使用以下内容更改网址:

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

    [1]此部分包含Eric P

    的答案

答案 1 :(得分:151)

使用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小时)

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

答案 2 :(得分:108)

如果您已经设置了SSH密钥并且仍然收到密码提示,请确保您的repo URL的格式为

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

而不是

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

要查看您的回购网址,请运行:

git remote show origin

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

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

答案 3 :(得分:37)

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

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

答案 4 :(得分:15)

无限期保存

您可以使用git-credential-store通过

git config credential.helper store

stores your password unencrypted in the file system

  

使用此帮助程序会将未加密的密码存储在磁盘上,仅受文件系统权限的保护。如果这不是可接受的安全权衡,请尝试使用git-credential-cache,或者找到与操作系统提供的安全存储集成的帮助程序。

超时

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

git config credential.helper cache

设置不同的超时,使用--timeout(此处为5分钟)

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

Secure Saving Indefinitely(OS X和Windows)

  
      
  • 如果您使用的是Mac,Git会附带“osxkeychain”模式,它会将凭据缓存到附加到您系统帐户的安全钥匙串中。此方法将凭据存储在磁盘上,并且它们永不过期,但它们使用存储HTTPS证书和Safari自动填充的相同系统进行加密。
  •   
  • 如果您使用的是Windows,则可以安装一个名为“Git Credential Manager for Windows”的帮助程序。这类似于上面描述的“osxkeychain”帮助程序,但使用Windows Credential Store来控制敏感信息。它可以在https://github.com/Microsoft/Git-Credential-Manager-for-Windows找到。 [强调我的]
  •   

答案 5 :(得分:8)

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

git@github.com:org/repo.git  

切换为我解决了问题!

答案 6 :(得分:5)

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

git config --global credential.helper wincred

Is there a way to skip password typing when using https:// on GitHub?

答案 7 :(得分:4)

只是想多次指出上述解决方案:

git config credential.helper store

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

答案 8 :(得分:3)

我使用了帕维尔建议的答案,它对我有用。我的不同之处在于我在添加遥控器时这样做:git remote add (alias) https://(name:password)@github.com/(the remote address).git

答案 9 :(得分:3)

在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

答案 10 :(得分:2)

我在Windows上的解决方案:

  1. 右键单击目录以推送并选择“Git Bash Here”。
  2. ssh-keygen -t rsa(按所有值输入)
  3. 检查终端:Your public key has been saved in /c/Users/<your_user_name_here>/.ssh/id_rsa.pub
  4. 从指定文件复制公钥。
  5. 转到您的GitHub个人资料=&gt;设置=&gt; SSH和GPG密钥=&gt;新SSH密钥=&gt;将SSH密钥粘贴到那里=&gt;保存

答案 11 :(得分:2)

运行以下命令解决了我的问题。

git config --global credential.helper wincred

请参阅以下github文档:

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

答案 12 :(得分:2)

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

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

--push标志确保仅更改git push命令的存储库的URL。 (原帖中提到的问题仅与git push命令有关。仅在推送操作中需要用户名+密码是GitHub上 public 存储库的正常设置。请注意私有GitHub上的存储库还需要用户名+密码来进行提取和获取操作,因此对于私有存储库,您不希望使用--push flag ...)

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

  1. 您的ISP或任何记录您的网络访问的人都可以轻松完成 在URL中以纯文本格式查看密码;

  2. 任何可以访问您电脑的人都可以使用git remote show origin查看您的密码。

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

    即使SSH密钥也不完全安全。例如,任何能够访问您的PC的人仍然会进行破坏您的存储库的推送,或者更糟糕的是推送提交对您的代码进行微妙的更改。 (所有推送的提交在GitHub上显然都是高度可见的。但是如果有人想偷偷地改变你的代码,他们可以--amend先前的提交而不改变提交消息,然后强制推送它。这将是隐秘的并且相当困难在实践中注意到。)

    但是泄露密码更糟。如果攻击者获得了您的用户名+密码的知识,他们可以执行诸如锁定您自己帐户,删除帐户,永久删除存储库等操作。

    或者 - 为简单起见安全性 - 您可以在网址中提供仅限您的用户名,这样您每次{{1}时都必须输入密码但是你不必每次都提供你的用户名。 (我非常喜欢这种方法,不得不输入密码让我在每次git push时都会停下来思考,所以我不能git push不小心。)

    git push

答案 13 :(得分:1)

第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仓库。

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

多数民众赞成。

答案 14 :(得分:1)

我建议使用凭证管理器来存储 Github 凭证。使用 git config --global credential.helper store 并不安全,因为它以明文形式存储 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

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

答案 15 :(得分:1)

据我所知,只有两种 safe 方法: ssh 使用密钥库加密的passwd

SSH

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

使用密钥库加密的密码

如果您仅使用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

答案 16 :(得分:1)

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

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

GIT CLONE

对于克隆,请使用&#34; git clone URL&#34;将URL格式从http:// {myuser} @ {my_repo_ip_address} / {myrepo_name.git}更改为http:// {myuser}:{mypwd} @ {my_repo_ip_address} / {myrepo_name.git}

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

清除

现在,这已经过去了

  1. 在git remote origin中写了密码。键入&#34; git remote -v&#34;看到损坏。通过设置没有密码的远程原始URL来纠正此问题。 &#34; git remote set_url origin http:// {myuser} @ {my_repo_ip_address} / {myrepo_name.git}&#34;
  2. 在存储库中的.git / logs中写入密码。使用unix命令替换所有pwd实例,例如find .git / logs -exec sed -i&#39; s / {my_url_with_pwd} // g&#39; {} \; 这里,{my_url_with_pwd}是带密码的URL。由于URL具有正斜杠,因此需要通过两个反斜杠进行转义。例如,对于网址http://kris:passs123@192.168.0.1/proj.git - &gt; HTTP:\\ / \\ /克里斯:passs123@192.168.0.1 \\ / proj.git
  3. 如果您的应用程序使用Java来发出这些命令,请使用ProcessBuilder而不是Runtime。如果必须使用Runtime,请使用getRunTime()。exec,它将String数组作为参数,将/ bin / bash和-c作为参数,而不是将单个String作为参数的参数。

    GIT FETCH / PULL / PUSH

    1. 在git remote url中设置密码为:&#34; git remote set_url origin http:// {myuser}:{mypwd} @ {my_repo_ip_address} / {myrepo_name.git}&#34;
    2. 发出命令git fetch / push / pull。然后,系统不会提示您输入密码。
    3. 如上一节所述进行清洗。不要错过。

答案 17 :(得分:0)

看来,至少在Windows上使用TortoiseGIT时,可以创建SSH密钥并将其简单地传输到GIT服务器:

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

答案 18 :(得分:0)

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

答案 19 :(得分:0)

就我而言,使用 SSH,在将公钥添加到 GitHub 后,然后将远程设置为 git@github.com/username/reponame.git 之类的内容,以及在本地永久添加私钥。本地命令,其中:

ssh 添加

ssh-add -K

我想有些人可能缺少后一步。