SSH密钥 - 仍然要求输入密码和密码

Hel*_*rld 428 git ssh github ssh-keys

当我克隆存储库时,我一直在"忍受"Github总是询问我的用户名和密码.我想绕过这一步,因为这是我工作流程中的一个烦恼.

我尝试使用本指南设置SSH密钥(我成功完成了).https://help.github.com/articles/generating-ssh-keys我成功了.

我的问题是,在克隆存储库时(使用SSH),我仍然被要求输入我的github密码和密码.我的理解是,在设置了这个SSH密钥后,我不再需要这样做了.

我有点不确定要问什么,所以我只是陈述我的目标.

我希望能够克隆存储库而无需一直输入我的Github信息.

我的SSH密钥丢失了什么?如果有人可以提供一些指导或资源,我会很感激,因为在GitHub中进行SSH身份验证时,我总是感到有些失落.

据我所知,这是一个测试事情是否正常工作的命令,这是我控制台的输出:

~ $ ssh -T git@github.com
Saving password to keychain failed
Enter passphrase for key '/Users/MYNAME/.ssh/id_rsa':
Hi MYNAME! You've successfully authenticated, but GitHub does not provide shell access.
Run Code Online (Sandbox Code Playgroud)

当我输入密码时,首先应该失败吗?然后,当我输入我的密码时,它会通过.

Kom*_*omu 739

添加没有钥匙串的身份

有时您可能不希望密码链中存储密码,但不希望一遍又一遍地输入密码.

你可以这样做:

ssh-add ~/.ssh/id_rsa 
Run Code Online (Sandbox Code Playgroud)

这将要求您输入密码,输入密码,直到重新启动它才会再次询问.

使用钥匙串添加身份

正如@dennis在评论中指出的那样,要通过将密码存储在密钥链中来重新启动密码,您可以在添加如下身份时使用该-K选项(-k对于Ubuntu):

ssh-add -K ~/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)

再次,这将要求您输入密码,输入密码,这次它永远不会再询问此身份.

  • 请注意,这不会在重新启动时保持身份.您可以使用`-K`选项在密钥链中添加密码,例如`ssh-add -K~/.ssh/id_rsa` (172认同)
  • 小写`-k`对我来说...(Linux Mint/Ubuntu 14.04 base)但是是的!最后整理了这个...... (27认同)
  • 你不需要任何论据; 只运行`ssh-add`会自动添加`〜/ .ssh/id_rsa`(以及其他文件).并且没有理由将输出发送到`/ dev/null`; 更好地看到它所做的报告. (13认同)
  • 为什么这样做?这实际上是一个黑客? (11认同)
  • 只需运行命令"ssh-add"并输入一次密码,命令行就不会再次提示您输入密码. (8认同)
  • 知道为什么我得到"无法打开与身份验证代理的连接."? (5认同)
  • 如果您收到错误消息“无法打开与身份验证代理的连接。”,请尝试“eval \`ssh-agent\”,然后尝试“ssh-add” (4认同)
  • `ssh-add -K〜/ .ssh / id_rsa` -K是未知的.. -A也一样... Ubuntu 18 (3认同)
  • 我尝试了很多不同的东西,这是有效的.谢谢@Komu! (2认同)
  • ssh-add仍然没有为我重新启动保存它.即使用-k.我的钥匙适用于腻子,问题似乎是git bash (2认同)

Gro*_*oot 231

在Mac OSX上,您可以使用以下命令将私钥添加到钥匙串:

ssh-add -K /path/to/private_key
Run Code Online (Sandbox Code Playgroud)

如果您的私钥存储在〜/ .ssh并且名为id_rsa:

ssh-add -K ~/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)

然后,系统将提示您输入密码,密码将存储在您的钥匙串中.

编辑 - 处理重启

为了不必在重新启动后填写您的密码,请将以下内容添加到您的ssh配置文件中(通常位于〜/ .ssh/config)

Host *
  UseKeychain yes
  AddKeysToAgent yes
  IdentityFile ~/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)

  • 没关系,我刚刚发现了这个问题.这是来自Mac OS X 10.12的错误(功能?),其中ssh-agent在启动期间不会自动加载钥匙串上的密码.https://github.com/lionheart/openradar-mirror/issues/15361 (8认同)
  • 在我的情况下,它仍然在重启后提示密码(macOS Sierrra 10.12.2).关于如何解决这个问题的任何想法? (6认同)
  • @ inigo333很有意思.我刚刚更新并注意到了这一点! (2认同)

Chr*_*sJF 179

我在这里尝试了所有的答案,这些答案都没有奏效!我的密码不会在我的Mac的会话/重启之间保持不变.

我从阅读OpenRadarTwitter的讨论中发现,Apple故意改变了 macOS 10.12 Sierra中ssh-agent 的行为,不再自动加载以前的SSH密钥.为了保持与El Cap相同的行为,我做了以下事情:

  1. ssh-add -K ~/.ssh/id_rsa
    注意:更改id_rsa键所在的路径.
  2. ssh-add -A
  3. 创建(或编辑,如果存在)以下~/.ssh/config文件:

    Host *
      UseKeychain yes
      AddKeysToAgent yes
      IdentityFile ~/.ssh/id_rsa
    
    Run Code Online (Sandbox Code Playgroud)

现在我的密码会在我的Mac重启之间被记住!

  • OSX升级后发生在我身上,谢谢(如果你只有一个键在`〜/ .ssh/id_rsa`,我认为不需要`ssh-add -A`) (5认同)
  • 这可能是添加到[github](http://stackoverflow.com/documentation/github/topics)或[osx](http://stackoverflow.com/documentation/osx/topics)文档页面的有用的东西.是最困难的时间弄清楚为什么我的Mac运行10.11而我的另一个运行10.12的行为不同. (2认同)
  • 截至2017年10月,如果您使用的是macOS 10.12或更高版本,那么这个答案正是您所需要的. (2认同)
  • 现在在github文档上:https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/#adding-your- ssh密钥到ssh代理 (2认同)

Sim*_*ias 174

如果您使用HTTPs网址,它将始终询问您的用户名/密码.

如果您SSH在克隆/设置遥控器时正确使用.然后确保你有一个ssh-agent来记住你的密码.这样,您只需通过终端会话输入一次密码.

如果它仍然太烦人,那么只需设置一个没有密码短语的ssh-key.

  • 我只想注意密码用于加密你的私钥,**所以如果你不使用密码,那么你的私钥将在你的机器上解密.**就像在文本文件中留下密码一样在你的电脑上. (42认同)
  • [请参阅此github doc](https://help.github.com/articles/changing-a-remote-s-url/)将远程的URL从https转换为ssh.要检查远程URL是ssh还是https,请使用`git remote -v`.要从https切换到ssh:`git remote set-url origin git@github.com:USERNAME/REPOSITORY.git` (26认同)
  • 感谢您的回应。我一直只使用HTTP。我正在尝试实现SSH身份验证,并认为我进行了设置。我需要安装ssh-agent超出git吗?谢谢 (2认同)
  • @R11G 你不能,否则密码将不安全......只需重新生成一个新密码。 (2认同)
  • 有趣的是,我的HTTPS存储库从不要求输入密码,而我的SSH存储库则总是输入密码。 (2认同)
  • 被否决是因为“什么”应该包括“如何”。 (2认同)

Jun*_*aid 47

TL;DR
您需要使用 ssh 代理。为此,在推送到 git 之前打开终端 & ,执行

ssh-add
Run Code Online (Sandbox Code Playgroud)

出现提示时输入您的密码。

在此处查看原始 StackExchange 答案


sud*_*ang 30

您可以删除密钥的密码

$ ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]
Run Code Online (Sandbox Code Playgroud)

或者你可以跑

$ ssh-keygen -p
Run Code Online (Sandbox Code Playgroud)

你得到一个密钥文件的提示.默认情况下~/.ssh/id_rsa按Enter键

系统将提示您输入当前密码短语.

然后会出现新密码短语,按回车键

  • 这是在重新启动后*唯一对我有用的东西*,所有 ssh-add -K、-k 等命令对我没有任何作用。 (3认同)

小智 29

只需运行以下命令:

ssh-add -K
Run Code Online (Sandbox Code Playgroud)

它永远不会要求您再次输入密码.

  • 实际上,它只修复它,直到我重新启动:( (7认同)
  • 在Windows的bash shell中," - k"标志必须是小写的.仅供参考 (4认同)
  • 这很好用,但我有点担心运行随机命令.但是,如果您检查文档`ssh-add`只是"将私钥标识添加到身份验证代理",并且`-K`选项只是使其如此"当添加标识时,每个密码短语也将存储在用户的密钥链中". (3认同)

Mah*_*lam 25

确保您也使用ssh作为您的存储库

mahtab@mahtab-Lenovo-G50-70:~/my-projects/jenkins-cje-2017$ git remote -v origin git@github.com:eMahtab/jenkins-cje-2017.git (fetch) origin git@github.com:eMahtab/jenkins-cje-2017.git (push)

在此输入图像描述

不要使用https,如果您的遥控器使用https,那么它将继续询问密码,即使您已将公钥添加到Github并将私钥添加到ssh-agent.以下将始终要求输入密码

mahtab@mahtab-Lenovo-G50-70:~/my-projects/jenkins-cje-2017$ git remote -v origin https://github.com/eMahtab/jenkins-cje-2017.git (fetch) origin https://github.com/eMahtab/jenkins-cje-2017.git (push)

  • 可以使用以下命令进行切换:`git remote set-url origin git@github.com:USERNAME/REPOSITORY.git` (4认同)

小智 22

github 上的这个页面有您需要的答案。您必须从 https 切换到 ssh 身份验证。

检查它是如何进行身份验证的,如下所示。

$ git remote -v
> origin  https://github.com/USERNAME/REPOSITORY.git (fetch)
> origin  https://github.com/USERNAME/REPOSITORY.git (push)
Run Code Online (Sandbox Code Playgroud)

使用 git remote set-url 命令将远程 URL 从 HTTPS 更改为 SSH。

$ git remote set-url origin git@github.com:USERNAME/REPOSITORY.git
Run Code Online (Sandbox Code Playgroud)

再次测试它

$ git remote -v
# Verify new remote URL
> origin  git@github.com:USERNAME/REPOSITORY.git (fetch)
> origin  git@github.com:USERNAME/REPOSITORY.git (push)
Run Code Online (Sandbox Code Playgroud)

就这样。现在就可以了。


Bla*_*ack 15

我不得不执行:

eval `ssh-agent -s`
ssh-add
Run Code Online (Sandbox Code Playgroud)

注意:每次重新启动后都必须再次执行此操作.

发现的解决方案在这里.


Mar*_*ina 14

如果您使用的是Windows,这对我有用:

eval `ssh-agent -s`
ssh-add ~/.ssh/*_rsa
Run Code Online (Sandbox Code Playgroud)

它会在第二个命令中要求密码,就是这样.

  • 当您注销并重新登录时,每次都必须重新输入密码。 (2认同)

pos*_*eys 12

使用 ssh-add 命令将您的公钥添加到 ssh-agent。

ssh-add
Run Code Online (Sandbox Code Playgroud)

确保 ssh 公钥,例如 ~/.ssh/id_rsa.pub 是您在 repo 设置中拥有的。

确保您实际上可以通过 ssh 进入服务器,例如对于 Bitbucket:

ssh -T git@bitbucket.org
Run Code Online (Sandbox Code Playgroud)

更新 url 以从 https 移动到 ssh。您可以通过检查以下输出来检查您使用的是哪个:

git remote -v
Run Code Online (Sandbox Code Playgroud)

如果您在 url 中看到 https://,那么您仍在使用 https。更新它:获取 url,只需将 https:// 替换为 ssh:// 例如更改:

https://git@bitbucket.org/../..
Run Code Online (Sandbox Code Playgroud)

到:

ssh://git@bitbucket.org/../..
Run Code Online (Sandbox Code Playgroud)

参考:https : //docs.github.com/en/github/using-git/changed-a-remotes-url#switching-remote-urls-from-https-to-ssh


小智 8

这个答案对我有用Ubuntu.

请参阅此GitHub文档,将远程的URL从https转换为ssh. https://help.github.com/articles/changing-a-remote-s-url/
要检查远程URL是ssh还是https,请使用git remote -v.

要从https切换到ssh:
git remote set-url origin git@github.com:USERNAME/REPOSITORY.git


Jam*_*ond 7

如果您之前使用 GIT 密码身份验证,但现在使用 SSH 身份验证,则需要将远程 URL 从 HTTPS 切换为 SSH

git remote set-url origin git@github.com:USERNAME/REPOSITORY.git
Run Code Online (Sandbox Code Playgroud)


Dhi*_*Yes 6

曾在LinuxMint/Ubuntu 工作

执行以下步骤

第1步:

转到文件 => /.ssh/config

将以下几行保存到文件中

Host bitbucket.org
    HostName bitbucket.org
    User git
    IdentityFile /home/apple/myssh-privatekey
    AddKeysToAgent yes
Run Code Online (Sandbox Code Playgroud)

不要忘记添加这一行AddKeysToAgent 是

第2步:

打开终端并将密钥集添加到ssh-add

$ ssh-add -k /home/apple/myssh-privatekey
Run Code Online (Sandbox Code Playgroud)

提供密码。


abo*_*ron 6

我最近升级到 macOS Mojave,并通过自制软件安装了一些工具,这似乎将 Apple 的版本换成ssh-add了不同的。我的默认版本ssh-add 没有这个-K选项。这导致了以下错误:

# ssh-add: illegal option -- K

您可以ssh-add通过运行查看您的版本which ssh-add

(我的存储在/usr/local/bin/ssh-add

为了解决这个问题,我不得不指出苹果版本的关键

/usr/bin/ssh-add -K ~/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)

之后 Git/GitHub 运行良好。有关更多信息,请参阅:错误:ssh-add:非法选项 -- K


cha*_*ier 6

此答案主要适用于 Windows 用户,如果您在任何其他操作系统上使用 tfs、github 或 gitlab 进行克隆时遇到问题,也同样适用。

使用 SSH 时默认的认证方式是私钥。每当由于某种原因失败时,ssh-agent 就会回退到基于用户名和密码的身份验证。

基于默认密钥的身份验证可能失败的原因有多种。以下是最常见的情况:

a) ssh-agent找不到默认的私钥文件 id_rsa,并且没有明确指定其他密钥路径。

b) 服务器中存储的公钥不正确。

c) 您尝试克隆的路径不正确。

在任何情况下,要解决问题,首先使用以下命令执行带有详细日志记录的 git clone 命令:

GIT_TRACE=1 GIT_SSH_COMMAND="ssh -vvv" git clone ssh://pathToYourRepo
Run Code Online (Sandbox Code Playgroud)

您可以查看日志中的每个步骤,以直观地了解可能是什么问题。


(a) 情况下的故障排除

  • 确保您在 .ssh 目录中有默认的密钥名称 id_rsa。您可能在使用 ssh-keygen 命令生成密钥时指定了一些不同的密钥名,或者根本没有任何密钥)。

  • 如果要为身份验证指定不同的密钥,请使用以下命令:

     ssh-agent bash -c 'ssh-add ~/.ssh/anotherKey; git clone ssh://pathToYourRepo'
    
    Run Code Online (Sandbox Code Playgroud)

(b) 情况下的故障排除

  • 确保在服务器中存储公钥时没有多余的空格。

(c) 情况下的故障排除

  • 确保您没有尝试使用存储库路径的 https 版本进行克隆。


zed*_*d45 5

对于Mac OSX Sierra,我发现在Open Radar的github问题中提出的修复修复了我的问题.好像Sierra改变了默认行为(升级后我开始遇到这个问题).

我发现这个特别有用:https: //github.com/lionheart/openradar-mirror/issues/15361#issuecomment-249059061

ssh-add -A 
Run Code Online (Sandbox Code Playgroud)

我跑完之后,这导致我的身份被添加到代理

ssh-add -K {/path/to/key}
Run Code Online (Sandbox Code Playgroud)

总结一下,在OSX.12中:

ssh-add -K {/path/to/key}
ssh-add -A 
Run Code Online (Sandbox Code Playgroud)

应该导致:

Identity added: {/path/to/file} ({/path/to/file})
Run Code Online (Sandbox Code Playgroud)

编辑:我注意到下次我完全重启(也就是代理停止并重新启动),这不再有效.更完整的解决方案是@ChrisJF上面提到的:创建~/.ssh/config文件.这是我的输出:

$ cat ~/.ssh/config
Host *
  UseKeychain yes
  AddKeysToAgent yes
  IdentityFile ~/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)

您可以根据IdentityFile需要添加任意数量的条目,但这是默认设置.这也是ATM上面的openradar链路上的"趋势"答案.


dan*_* sp 5

这对我有用:

git config --global core.sshCommand "'C:\Windows\System32\OpenSSH\ssh.exe'"
Run Code Online (Sandbox Code Playgroud)