首页 文章

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

提问于
浏览
536

我知道如何为https请求提供用户名和密码,如下所示:

git clone https://username:password@remote

但我想知道如何为遥控器提供用户名和密码,如下所示:

git clone git@remote.git

我试过这样的:

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

但他们没有奏效 .

6 回答

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

    这种方式对我来说是一个github存储库

    Edit based on Michael_Scharf's comment:

    您可以省略密码,以便不会记录您的bash历史文件:

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

    它会提示您输入密码

  • 9

    在@Bassetassen的answer的评论中,@ plosco提到你至少可以使用 git clone https://<token>@github.com/username/repository.git 从GitHub克隆 . 我想我会扩展如何做到这一点,以防任何人遇到这样的答案,就像我在尝试自动化克隆时所做的那样 .

    GitHub有一个关于如何执行此操作的very handy指南,但如果您想将其全部包含在一行中以用于自动化目的,则不会介绍该怎么做 . 它警告 adding the token to the clone URL will store it in plaintext in .git/config . 这显然是几乎每个用例的安全风险,但因为我计划在我关注时删除repo并撤销令牌 .

    1.创建令牌

    GitHub有一个关于如何获得令牌的whole guide here,但这里是TL; DR .

    • 转到设置>开发人员设置>个人访问令牌(here's a direct link

    • 单击"Generate a New Token"并再次输入密码 . (h ere's another direct link

    • 为其设置描述/名称,检查"repo"权限并点击页面底部的"Generate token"按钮 .

    • 复制新令牌 before you leave the page

    2.克隆回购

    与@plosco给出的命令相同, git clone https://<token>@github.com/<username>/<repository>.git ,只需用您的信息替换 <token><username><repository> .

    如果你想将它克隆到一个特定的文件夹,只需在最后插入文件夹地址,如下所示: git clone https://<token>@github.com/<username>/<repository.git> <folder> ,你猜对了 <folder> ,将它克隆到的文件夹!您当然可以像其他地方一样使用 ...~ 等 .

    3.不留痕迹

    并非所有这些都是必要的,这取决于你所做的事情的敏感程度 .

    • 如果你有一段时间无意使用它,你可能不想留下那个令牌,所以回到tokens page然后点击旁边的删除按钮 .

    • 如果您不再需要回购,请将其删除 rm -rf <folder> .

    • 如果确实需要再次使用repo,但不需要再次自动执行,可以通过执行 git remote remove origin 删除远程,或者只需通过运行 git remote set-url origin https://github.com/<username>/<repository.git> 删除令牌 .

    • 清除bash历史记录以确保令牌不会保留在那里 . 有很多方法可以做到这一点,请参阅this questionthis question . 但是,可能更容易将前面的所有命令添加到空格中,以防止它们被存储开始 .

    请注意,我不是专业人士,所以上述可能并不安全,因为任何法医工作都不会留下任何痕迹 .

  • 2

    我通过以下方式解决了这个问题:

    enter image description here

  • 2

    On Windows ,以下步骤应在 git clone ing时重新触发GitHub登录窗口:

    • "Credential Manager"的搜索开始菜单

    • 选择"Windows Credentials"

    • 删除与Git或GitHub相关的所有凭据

    result

  • 5
    git config --global core.askpass
    

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

  • 828

    user@host:path/to/repo 格式告诉Git使用ssh以用户名 user 登录 host . 来自git help clone

    ssh协议也可以使用类似scp的替代语法:[user @] host.xz:path / to / repo.git /

    @ 之前的部分是用户名,身份验证方法(密码,公钥等)由ssh确定,而不是Git . Git无法将密码传递给ssh,因为ssh甚至可能根本不使用密码,具体取决于远程服务器的配置 .

    使用ssh-agent以避免始终键入密码

    如果您不想一直输入ssh密码,典型的解决方案是generate a public/private key pair,将公钥放在远程服务器上的~/.ssh/authorized_keys file中,并将私钥加载到ssh-agent中 . 另请参见Configuring Git over SSH to login onceGitHub's help page on ssh key passphrasesgitolite's ssh documentationHeroku's ssh keys documentation .

    在GitHub(或Heroku或......)的多个帐户之间进行选择

    如果您在GitHub或Heroku这样的地方有多个帐户,您将拥有多个ssh密钥(每个帐户至少有一个) . 要选择您要登录的帐户,您必须tell ssh which private key to use .

    例如,假设您有两个GitHub帐户: foobar . 您的 foo 的ssh键是 ~/.ssh/foo_github_idbar 的ssh键是 ~/.ssh/bar_github_id . 您想要使用 foo 帐户访问 git@github.com:foo/foo.git ,使用 bar 帐户访问 git@github.com:bar/bar.git . 您可以将以下内容添加到 ~/.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
    

    然后,您将按如下方式克隆这两个存储库:

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

    完全避免使用ssh

    有些服务提供HTTP访问作为ssh的替代方法:

    • GitHub:
    https://username:password@github.com/username/repository.git
    
    • Gitorious:
    https://username:password@gitorious.org/project/repository.git
    

    WARNING :添加您的克隆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
    

    以上情况会导致Git每15分钟(默认情况下)要求输入一次密码 . 有关详细信息,请参阅git help credentials .

相关问题