我知道如何为HTTPS请求提供用户名和密码,如下所示:
git clone https://username:password@remote
Run Code Online (Sandbox Code Playgroud)
但我想知道如何为遥控器提供用户名和密码,如下所示:
git clone git@remote.git
Run Code Online (Sandbox Code Playgroud)
我试过这样的:
git clone username:password@git@remote.git
git clone git@username:password@remote.git
git clone git@remote.git@username:password
Run Code Online (Sandbox Code Playgroud)
但他们没有奏效.
Bas*_*sen 1157
使用:
git clone https://username:password@github.com/username/repository.git
Run Code Online (Sandbox Code Playgroud)
这种方式对我来说是一个GitHub存储库.
基于Michael Scharf的评论:
您可以省略密码,以便它不会记录在您的Bash历史记录文件中:
git clone https://username@github.com/username/repository.git
Run Code Online (Sandbox Code Playgroud)
它会提示您输入密码.
Ric*_*sen 197
该user@host:path/to/repo
格式告诉Git的使用ssh登录到host
使用用户名user
.来自git help clone
:
另一种类似scp的语法也可以与ssh协议一起使用:
[user@]host.xz:path/to/repo.git/
前面的部分@
是用户名,验证方法(密码,公钥等)由ssh确定,而不是Git.Git无法将密码传递给ssh,因为ssh甚至可能根本不使用密码,具体取决于远程服务器的配置.
ssh-agent
以避免输入密码,所有的时间如果您不想一直输入ssh密码,典型的解决方案是生成公钥/私钥对,将公钥放在远程服务器上的~/.ssh/authorized_keys
文件中,然后将私钥加载到ssh-agent
.另请参阅通过SSH配置Git以登录一次,关于ssh密钥密码的GitHub帮助页面,gitolite的ssh文档和Heroku的ssh密钥文档.
如果您在GitHub或Heroku这样的地方有多个帐户,您将拥有多个ssh密钥(每个帐户至少有一个).要选择要登录的帐户,您必须告诉ssh使用哪个私钥.
例如,假设您有两个GitHub帐户: foo
和bar
.你的ssh键foo
是~/.ssh/foo_github_id
和你的ssh键bar
是~/.ssh/bar_github_id
.您要访问git@github.com:foo/foo.git
您的foo
帐户,并git@github.com:bar/bar.git
与您的bar
帐户.您可以将以下内容添加到您的~/.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
Run Code Online (Sandbox Code Playgroud)
然后,您将克隆这两个存储库,如下所示:
git clone gh-foo:foo/foo.git # logs in with account foo
git clone gh-bar:bar/bar.git # logs in with account bar
Run Code Online (Sandbox Code Playgroud)
有些服务提供HTTP访问作为ssh的替代方法:
GitHub的:
https://username:password@github.com/username/repository.git
Run Code Online (Sandbox Code Playgroud)Gitorious:
https://username:password@gitorious.org/project/repository.git
Run Code Online (Sandbox Code Playgroud)Heroku:请参阅此支持文章.
警告:将密码添加到克隆URL将导致Git存储您的明文密码.git/config
.要在使用HTTP时安全地存储密码,请使用凭证帮助程序.例如:
git config --global credential.helper cache
git config --global credential.https://github.com.username foo
git clone https://github.com/foo/repository.git
Run Code Online (Sandbox Code Playgroud)
以上将导致Git每15分钟(默认情况下)要求输入一次密码.详情git help credentials
请见.
Ans*_*han 56
如果它们造成问题,请按照以下参数替换为您的特殊情况:
! # $ & ' ( ) * + , / : ; = ? @ [ ]
%21 %23 %24 %26 %27 %28 %29 %2A %2B %2C %2F %3A %3B %3D %3F %40 %5B %5D
Run Code Online (Sandbox Code Playgroud)
所以例如 -
实际网址: https://usern@me:p@ssword@git/reponame.git
要使用的解决方案 URL: https://usern%40me:p%40ssword@git/reponame.git
Har*_*ore 47
您必须使用 2021 年 8 月 13 日发布的帖子
\n克隆
\nhttps://username:token@github.com/username/repository.git
生成令牌:
\n设置\xe2\x86\x92开发人员设置\xe2\x86\x92个人访问令牌\xe2\x86\x92生成新令牌*
\n成功克隆后,下次执行此操作时git push
,您将不必再次提及用户名。您可以通过在记事本.git/config
中打开该文件来确认这一点。它将显示:
[remote "origin"]\n url = https://username:tokenxxxxxxxxxx@github.com/username/repo.git\n
Run Code Online (Sandbox Code Playgroud)\n
Rob*_*ose 30
在@Bassetassen的回答中,@ plosco 提到你git clone https://<token>@github.com/username/repository.git
至少可以用来克隆GitHub.我想我会扩展如何做到这一点,以防任何人遇到这样的答案,就像我在尝试自动化克隆时所做的那样.
GitHub有一个非常方便的指导如何执行此操作,但它不包括如果您想将它们全部包含在一行以用于自动化目的,该怎么办.它警告说,将标记添加到克隆URL将以明文形式存储 .git/config
.这显然是几乎所有用例的安全风险,但由于我计划在完成后删除回购并撤销令牌,我不在乎.
GitHub 在这里有关于如何获得令牌的完整指南,但这里是TL; DR.
与@plosco给出的命令相同git clone https://<token>@github.com/<username>/<repository>.git
,只需替换<token>
,<username>
以及<repository>
您的信息.
如果你想将其克隆到一个特定的文件夹,只是在像这样末尾插入的文件夹地址:git clone https://<token>@github.com/<username>/<repository.git> <folder>
,其中<folder>
是,你猜对了,该文件夹将其克隆到!当然你也可以使用.
,..
,~
等在这里就像你可以在其他地方.
并非所有这些都是必要的,这取决于你所做的事情的敏感程度.
rm -rf <folder>
.git remote remove origin
或仅通过运行删除令牌来删除远程git remote set-url origin https://github.com/<username>/<repository.git>
.请注意,我不是专业人士,所以上述内容可能并不安全,因为任何法医工作都不会留下痕迹.
Mas*_*ari 22
要克隆存储库,首先您应该生成一个访问令牌(您不能再使用您的登录密码),然后使用此生成的令牌克隆存储库。
\nGitHub:
\n设置\xe2\x86\x92开发人员设置\xe2\x86\x92个人访问令牌\xe2\x86\x92生成新令牌
Bitbucket :
\n设置\xe2\x86\x92个人 Bitbucket 设置\xe2\x86\x92应用程序密码\xe2\x86\x92创建应用程序密码
GitHub:
\ngit clone https://YOUR-USERNAME:GENERATED-TOKEN@github.com/YOUR-USERNAME/YOUR-REPOSITORY\n
Run Code Online (Sandbox Code Playgroud)\n位桶:
\ngit clone https://YOUR-USERNAME@bitbucket.org/YOUR-REPOSITORY\n
Run Code Online (Sandbox Code Playgroud)\n它将提示您输入生成的令牌。
\nSan*_*nan 15
尽管有很多答案,但是当用户名或密码中包含特殊字符时,我会遇到重复的问题。
URL对git的用户名和密码进行编码,然后将其用作URL本身的一部分(无需考虑安全性时)。
说,URL编码的用户名值
“用户+1”是用户%2B1
和密码的URL编码值
“ Welcome @ 1234”受到欢迎%401234
然后,您的GIT克隆网址将如下所示:
git clone https://user%2B1:Welcome%401234@actual-git-url-for-the-repo
完美地工作,而git clone https:// user + 1:Welcome @ 1234 @ actual-git-url-for-the-repo给您403错误
希望这可以帮助。
以防万一,想要在线URL编码:https : //www.urlencoder.org/
mao*_*izm 11
我更喜欢使用GIT_ASKPASS环境向 Git 提供 HTTPS 凭据。
假设登录名和密码导出到USR
andPSW
变量中,以下脚本不会在历史记录和磁盘中留下密码痕迹,而且不易受到密码中特殊字符的影响:
GIT_ASKPASS=$(mktemp) && chmod a+rx $GIT_ASKPASS && export GIT_ASKPASS
cat > $GIT_ASKPASS <<'EOF'
#!/bin/sh
exec echo "$PSW"
EOF
git clone https://${USR}@example.com/repo.git
Run Code Online (Sandbox Code Playgroud)
注意:请注意heredoc标记周围的单引号'EOF'
,这意味着临时脚本保存字面字符,而不是变量$PSW
的密码/扩展值PSW
我通过以下方式解决了这个问题:
如果您正在使用http/https
并且希望完全自动化该过程而不需要任何用户输入或任何用户提示(例如:在 CI/CD 管道内),您可以使用以下方法利用git credential.helper
GIT_CREDS_PATH="/my/random/path/to/a/git/creds/file"
# Or you may choose to not specify GIT_CREDS_PATH at all.
# See https://git-scm.com/docs/git-credential-store#FILES for the defaults used
git config --global credential.helper "store --file ${GIT_CREDS_PATH}"
echo "https://alice:${ALICE_GITHUB_PASSWORD}@github.com" > ${GIT_CREDS_PATH}
Run Code Online (Sandbox Code Playgroud)
您可以选择ALICE_GITHUB_PASSWORD
从以前的 shell 命令或管道配置等设置环境变量。
请记住,基于“存储”的 git-credential-helper 以纯文本形式存储密码和值。因此,请确保您的令牌/密码具有非常有限的权限。
现在只需使用HTTPS://alice@github.com/my_repo.git无论您的自动化系统需要获取回购-它将使用的凭据alice
在github.com
通过GIT-凭证辅助的商店。
在Windows上,执行以下步骤应在git clone
ing 时重新触发GitHub登录窗口:
git config --global core.askpass
Run Code Online (Sandbox Code Playgroud)
在以相同方式克隆之前先运行它,应该修复!
归档时间: |
|
查看次数: |
1169914 次 |
最近记录: |