我git push
我的工作是远程Git存储库。
每个push
都会提示我输入username
和password
。我想在每次推送时都避免它,但如何配置以避免它?
答案 0 :(得分:285)
打开终端以创建ssh密钥:
cd ~ #Your home directory
ssh-keygen -t rsa #Press enter for all values
(仅当提交程序能够使用证书/私有和公共ssh密钥时才有效)
这是上面步骤的putty gen walkthrough
此步骤因遥控器的设置方式而异。
如果它是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
如果您已完成上述步骤并仍在获取密码提示,请确保您的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 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'
- 如果您使用的是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上的解决方案:
ssh-keygen -t rsa
(按所有值输入)Your public key has been saved in /c/Users/<your_user_name_here>/.ssh/id_rsa.pub
答案 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
...)
警告:这本质上是不安全的,因为:
您的ISP或任何记录您的网络访问的人都可以轻松完成 在URL中以纯文本格式查看密码;
任何可以访问您电脑的人都可以使用git remote show origin
查看您的密码。
这就是为什么使用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-agentssh-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 。
cat ~/.ssh/id_rsa.pub
,将其粘贴,命名并保存(如果没有这样的文件,请通过ssh-keygen -t rsa
为自己生成一个文件-只需对所有提示输入 Enter ); 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
并确认是,即可享受无密码的世界。如果您仅使用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}
然后清除密码存储库,如下一节所述。
清除
现在,这已经过去了
如果您的应用程序使用Java来发出这些命令,请使用ProcessBuilder而不是Runtime。如果必须使用Runtime,请使用getRunTime()。exec,它将String数组作为参数,将/ bin / bash和-c作为参数,而不是将单个String作为参数的参数。
GIT FETCH / PULL / PUSH
答案 17 :(得分:0)
看来,至少在Windows上使用TortoiseGIT时,可以创建SSH密钥并将其简单地传输到GIT服务器:
> ssh-keygen.exe
> ssh-copy-id [username]@[GIT_server]
答案 18 :(得分:0)
答案 19 :(得分:0)
就我而言,使用 SSH,在将公钥添加到 GitHub 后,然后将远程设置为 git@github.com/username/reponame.git 之类的内容,以及在本地永久添加私钥。本地命令,其中:
ssh 添加
ssh-add -K
我想有些人可能缺少后一步。