我git push
我的工作提高到一个远程的Git仓库。
一切push
都会提示我输入username
和password
。我想在每次推送时都避免使用它,但是如何配置以避免它呢?
我git push
我的工作提高到一个远程的Git仓库。
一切push
都会提示我输入username
和password
。我想在每次推送时都避免使用它,但是如何配置以避免它呢?
Answers:
打开终端以创建ssh密钥:
cd ~ #Your home directory
ssh-keygen -t rsa #Press enter for all values
(仅在提交程序能够使用证书/私有和公共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
如果您已完成上述步骤,但仍收到密码提示,请确保您的回购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的回答
git remote set-url origin git@github.com:/username/projectname.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小时)。
注意:凭据帮助程序将未加密的密码存储在本地磁盘上。
git
联机帮助页上:“使用此帮助程序会将未加密的密码存储在磁盘上,仅受文件系统权限保护。”
store
凭据帮助器将密码存储在未加密的磁盘上的警告。
git config --unset credential.helper
如果您已经设置了SSH密钥,但仍收到密码提示,请确保您的回购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
:
git remote set-url origin git+ssh://git@github.com/username/reponame.git
git init
本地使用后解决了我的问题,然后在GitHub网站上从一个新仓库中添加了远程后尝试推送的问题。
git@github.com/username/reponame.git
只需使用--repo
git push命令的选项即可。像这样:
$ git push --repo https://name:password@bitbucket.org/name/repo.git
git remote set-url origin https://name:password@github.com/repo.git
name@github.com/....git
如果您不介意每次都被密码困扰,那么我也将URL设置为可行的。
git push --repo https://github.com/Username/repo
它无需.git
扩展即可工作
您可以使用混帐凭据店通过
git config credential.helper store
使用此帮助程序会将密码未加密地存储在磁盘上,仅受文件系统权限保护。如果这不是可接受的安全性折衷方案,请尝试使用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自动填充的同一系统对其进行加密。在命令行上运行以下命令将启用此功能:
git config --global credential.helper osxkeychain
。您还需要使用“钥匙串”应用程序将凭据存储在“钥匙串”中。- 如果您使用的是Windows,则可以安装名为“ Git Credential Manager for Windows”的帮助程序。这类似于上述的“ osxkeychain”帮助程序,但是使用Windows凭据存储来控制敏感信息。可以在https://github.com/Microsoft/Git-Credential-Manager-for-Windows中找到它。[重点是我的]
credential.helper cache
不起作用。应该是git config --global credential.helper wincred
。
步骤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
第四步 -
现在,使用以下命令将远程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
而已。
将您的git客户端连接到您的OS凭据存储。例如,在Windows中,您将凭据助手绑定到wincred:
git config --global credential.helper wincred
在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
据我所知,只有两种安全的方法:使用keystore加密的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
。
如果您的PC是安全的,或者您不关心密码的安全性,则可以非常简单地实现此目的。假设远程存储库位于GitHub上,并且origin
是远程存储库的本地名称,请使用此命令
git remote set-url --push origin https://<username>:<password>@github.com/<repo>
该--push
标志确保仅更改该git push
命令的存储库的URL 。(原始帖子中提出的问题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服务器中@之后,会破坏命令密码的想法?
这是因为git在clone / pull / push / fetch命令中没有提供选项来通过管道发送凭据的缘故。尽管它提供了credential.helper,但它存储在文件系统上或创建守护程序等。通常,GIT的凭据是系统级别的凭据,确保它们安全的责任在于调用git命令的应用程序。确实非常不安全。
这是我必须解决的问题。1. Git版本(git --version)应大于或等于1.8.3。
吉特克隆
对于克隆,将URL从以下格式更改为“ git clone 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抓/拉/推