运行“git clone git@remote.git”时如何提供用户名和密码?

本文介绍了在运行“git clone git@remote.git”时如何提供用户名和密码,包括通过ssh、免密登录、多账户选择及完全避免使用ssh的方法。重点讲述了生成GitHub个人访问令牌来避免频繁输入密码,并提供了相关的操作步骤。
摘要由CSDN通过智能技术生成

本文翻译自:How do I provide a username and password when running “git clone git@remote.git”?

I know how to provide a username and password to an HTTPS request like this: 我知道如何为HTTPS请求提供用户名和密码,如下所示:

git clone https://username:password@remote

But I'd like to know how to provide a username and password to the remote like this: 但我想知道如何为遥控器提供用户名和密码,如下所示:

git clone git@remote.git

I've tried like this: 我试过这样的:

git clone username:password@git@remote.git
git clone git@username:password@remote.git
git clone git@remote.git@username:password

But they haven't worked. 但他们没有奏效。


#1楼

参考:https://stackoom.com/question/gBaQ/运行-git-clone-git-remote-git-时如何提供用户名和密码


#2楼

Use: 使用:

git clone https://username:password@github.com/username/repository.git

This way worked for me from a GitHub repository. 这种方式对我来说是一个GitHub存储库。

Based on Michael Scharf's comment: 基于Michael Scharf的评论:

You can leave out the password so that it won't be logged in your Bash history file: 您可以省略密码,以便它不会记录在您的Bash历史记录文件中:

git clone https://username@github.com/username/repository.git

It will prompt you for your password. 它会提示您输入密码。


#3楼

The user@host:path/to/repo format tells Git to use ssh to log in to host with username user . user@host:path/to/repo格式告诉Git使用ssh登录host用户名user From git help clone : git help clone

An alternative scp-like syntax may also be used with the ssh protocol: 另一种类似scp的语法也可以与ssh协议一起使用:

[user@]host.xz:path/to/repo.git/

The part before the @ is the username, and the authentication method (password, public key, etc.) is determined by ssh, not Git. @之前的部分是用户名,身份验证方法(密码,公钥等)由ssh确定,而不是Git。 Git has no way to pass a password to ssh, because ssh might not even use a password depending on the configuration of the remote server. Git无法将密码传递给ssh,因为ssh甚至可能根本不使用密码,具体取决于远程服务器的配置。

Use ssh-agent to avoid typing passwords all the time 使用ssh-agent避免一直输入密码

If you don't want to type your ssh password all the time, the typical solution is to generate a public/private key pair , put the public key in your ~/.ssh/authorized_keys file on the remote server, and load your private key into ssh-agent . 如果您不想一直输入ssh密码,典型的解决方案是生成公钥/私钥对 ,将~/.ssh/authorized_keys放在远程服务器上的~/.ssh/authorized_keys文件中 ,然后加载私有密钥键入ssh-agent Also see Configuring Git over SSH to login once , GitHub's help page on ssh key passphrases , gitolite's ssh documentation , and Heroku's ssh keys documentation . 另请参阅通过SSH配置Git以登录一次关于ssh密钥密码的GitHub帮助页面gitolite的ssh文档Heroku的ssh密钥文档

Choosing between multiple accounts at GitHub (or Heroku or...) 在GitHub(或Heroku或......)的多个帐户之间进行选择

If you have multiple accounts at a place like GitHub or Heroku, you'll have multiple ssh keys (at least one per account). 如果您在GitHub或Heroku这样的地方有多个帐户,您将拥有多个ssh密钥(每个帐户至少有一个)。 To pick which account you want to log in as, you have to tell ssh which private key to use . 要选择要登录的帐户,您必须告诉ssh使用哪个私钥

For example, suppose you had two GitHub accounts: foo and bar . 例如,假设您有两个GitHub帐户: foobar Your ssh key for foo is ~/.ssh/foo_github_id and your ssh key for bar is ~/.ssh/bar_github_id . 为您的SSH密钥foo~/.ssh/foo_github_id并为您的SSH密钥bar~/.ssh/bar_github_id You want to access git@github.com:foo/foo.git with your foo account and git@github.com:bar/bar.git with your bar account. 您想要使用您的foo帐户访问git@github.com:foo/foo.git ,使用您的bar帐户访问git@github.com:foo/foo.git git@github.com:bar/bar.git You would add the following to your ~/.ssh/config : 您可以将以下内容添加到~/.ssh/config

Host gh-foo
    Hostname github.com
    User git
    IdentityFile ~/.ssh/foo_github_id
Host gh-bar
    Hostname github.com
    User git
    IdentityFile ~/.ssh/bar_github_id

You would then clone the two repositories as follows: 然后,您将克隆这两个存储库,如下所示:

git clone gh-foo:foo/foo.git  # logs in with account foo
git clone gh-bar:bar/bar.git  # logs in with account bar

Avoiding ssh altogether 完全避免使用ssh

Some services provide HTTP access as an alternative to ssh: 有些服务提供HTTP访问作为ssh的替代方法:

  • GitHub: GitHub的:

     https://username:password@github.com/username/repository.git 
  • Gitorious: Gitorious:

     https://username:password@gitorious.org/project/repository.git 
  • Heroku: See this support article . Heroku:请参阅此支持文章

WARNING : Adding your password to the clone URL will cause Git to store your plaintext password in .git/config . 警告 :将密码添加到克隆URL将导致Git将您的纯文本密码存储在.git/config To securely store your password when using HTTP, use a credential helper. 要在使用HTTP时安全地存储密码,请使用凭证帮助程序。 For example: 例如:

git config --global credential.helper cache
git config --global credential.https://github.com.username foo
git clone https://github.com/foo/repository.git

The above will cause Git to ask for your password once every 15 minutes (by default). 以上将导致Git每15分钟(默认情况下)要求输入一次密码。 See git help credentials for details. 有关详细信息,请参阅git help credentials


#4楼

In the comments of @Bassetassen's answer , @plosco mentioned that you can use git clone https://<token>@github.com/username/repository.git to clone from GitHub at the very least. 在@Bassetassen的回答中 ,@ plosco提到你可以使用git clone https://<token>@github.com/username/repository.git至少从GitHub克隆。 I thought I would expand on how to do that, in case anyone comes across this answer like I did while trying to automate some cloning. 我想我会扩展如何做到这一点,以防任何人遇到这样的答案,就像我在尝试自动化克隆时所做的那样。

GitHub has a very handy guide on how to do this, but it doesn't cover what to do if you want to include it all in one line for automation purposes. GitHub有一个非常方便的指导如何执行此操作,但它不包括如果您想将它们全部包含在一行中以便进行自动化,该怎么办。 It warns that adding the token to the clone URL will store it in plaintext in .git/config . 它警告说, 将标记添加到克隆URL将以明文形式存储在 .git/config This is obviously a security risk for almost every use case, but since I plan on deleting the repo and revoking the token when I'm done, I don't care. 这显然是几乎所有用例的安全风险,但由于我计划在完成后删除回购并撤销令牌,我不在乎。

1. Create a Token 1.创建令牌

GitHub has a whole guide here on how to get a token, but here's the TL;DR. GitHub 在这里有关于如何获得令牌的完整指南 ,但这里是TL; DR。

  1. Go to Settings > Developer Settings > Personal Access Tokens ( here's a direct link ) 转到设置>开发人员设置>个人访问令牌这是直接链接
  2. Click "Generate a New Token" and enter your password again. 单击“生成新令牌”并再次输入密码。 (h ere's another direct link ) (这是另一个直接链接
  3. Set a description/name for it, check the "repo" permission and hit the "Generate token" button at the bottom of the page. 设置它的描述/名称,检查“repo”权限并点击页面底部的“Generate token”按钮。
  4. Copy your new token before you leave the page 在离开页面之前复制新令牌

2. Clone the Repo 2.克隆回购

Same as the command @plosco gave, git clone https://<token>@github.com/<username>/<repository>.git , just replace <token> , <username> and <repository> with whatever your info is. 与@plosco给出的命令相同, git clone https://<token>@github.com/<username>/<repository>.git ,只需将<token><username><repository>替换为您的任何信息。

If you want to clone it to a specific folder, just insert the folder address at the end like so: git clone https://<token>@github.com/<username>/<repository.git> <folder> , where <folder> is, you guessed it, the folder to clone it to! 如果要将其克隆到特定文件夹,只需在末尾插入文件夹地址,如下所示: git clone https://<token>@github.com/<username>/<repository.git> <folder> ,其中,你猜对了<folder> ,将它克隆到的文件夹! You can of course use . 你当然可以使用. , .. , ~ , etc. here like you can elsewhere. ..~ ,等等,你可以在其他地方。

3. Leave No Trace 3.不留痕迹

Not all of this may be necessary, depending on how sensitive what you're doing is. 并非所有这些都是必要的,这取决于你所做的事情的敏感程度。

  • You probably don't want to leave that token hanging around if you have no intentions of using it for some time, so go back to the tokens page and hit the delete button next to it. 如果你有一段时间无意使用它,你可能不想留下那个令牌,所以回到令牌页面然后点击它旁边的删除按钮。
  • If you don't need the repo again, delete it rm -rf <folder> . 如果您不再需要回购,请将其删除rm -rf <folder>
  • If do need the repo again, but don't need to automate it again, you can remove the remote by doing git remote remove origin or just remove the token by running git remote set-url origin https://github.com/<username>/<repository.git> . 如果确实需要再次使用repo,但不需要再次自动化,可以通过执行git remote remove origin删除远程,或者只需通过运行git remote set-url origin https://github.com/<username>/<repository.git>删除令牌git remote set-url origin https://github.com/<username>/<repository.git>
  • Clear your bash history to make sure the token doesn't stay logged there. 清除您的bash历史记录以确保令牌不会保留在那里。 There are many ways to do this, see this question and this question . 有很多方法可以做到这一点,请看这个问题这个问题 However, it may be easier to just prepend all the above commands with a space in order to prevent them being stored to begin with. 但是,可能更容易将前面的所有命令添加到空格中以防止它们被存储开始。

Note that I'm no pro, so the above may not be secure in the sense that no trace would be left for any sort of forensic work. 请注意,我不是专业人士,所以上述内容可能并不安全,因为任何法医工作都不会留下任何痕迹。


#5楼

I solved this problem in the following way: 我通过以下方式解决了这个问题:

在此输入图像描述


#6楼

git config --global core.askpass

在克隆之前先运行此方法,应该修复!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值