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

时间:2014-01-13 15:29:30

标签: git github ssh 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.

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

33 个答案:

答案 0 :(得分:657)

添加不带钥匙串的身份

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

你可以这样做:

ssh-add ~/.ssh/id_rsa 

这将要求您输入密码,输入密码并在重新启动之前不再询问。

使用钥匙串添加身份

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

ssh-add -K ~/.ssh/id_rsa

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

答案 1 :(得分:217)

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

ssh-add -K /path/to/private_key

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

ssh-add -K ~/.ssh/id_rsa

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

编辑 - 处理重启

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

Host *
  UseKeychain yes
  AddKeysToAgent yes
  IdentityFile ~/.ssh/id_rsa

答案 2 :(得分:172)

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

我在阅读this OpenRadarthis Twitter discussion时发现的是Apple purposely changed the behaviour对于macOS 10.12中的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
    
  4. 现在我的密码会在重新启动Mac之间被记住!

答案 3 :(得分:140)

如果您使用HTTPs网址,则会始终询问您的用户名/密码。

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

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

答案 4 :(得分:30)

您可以删除密钥

的密码
$ ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]

或者你可以运行

$ ssh-keygen -p

您收到密钥文件的提示。默认为~/.ssh/id_rsa,请按Enter键

系统会提示您输入当前密码短语。

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

答案 5 :(得分:27)

只需运行以下命令:

ssh-add -K

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

答案 6 :(得分:19)

确保您的存储库也使用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)

enter image description here

不要使用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)

答案 7 :(得分:13)

如果您正在使用Windows,这对我有用:

eval `ssh-agent -s`
ssh-add ~/.ssh/*_rsa

它会在第二个命令中询问密码,就是这样。

答案 8 :(得分:10)

尝试ssh-agent,因为它在那里解释:https://help.github.com/articles/working-with-ssh-key-passphrases

答案 9 :(得分:10)

我必须执行:

eval `ssh-agent -s`
ssh-add

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

找到了解决方法here

答案 10 :(得分: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

答案 11 :(得分:7)

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

ssh-add

确保ssh公钥,例如〜/ .ssh / id_rsa.pub是您的存储库设置中的内容。

确保您确实可以将ssh插入服务器,例如对于Bitbucket:

ssh -T git@bitbucket.org

将URL更新为从https移至ssh。您可以通过检查以下内容的输出来检查使用哪个:

git remote -v

如果您在网址中看到https://,则您仍在使用https。要进行更新,请执行以下操作:提取网址,然后将https://替换为ssh://,例如。 更改:

https://git@bitbucket.org/../..

收件人:

ssh://git@bitbucket.org/../..

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

答案 12 :(得分:5)

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

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

ssh-add -A 

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

ssh-add -K {/path/to/key}

总结一下,在OSX.12中:

ssh-add -K {/path/to/key}
ssh-add -A 

应该导致:

Identity added: {/path/to/file} ({/path/to/file})

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

$ cat ~/.ssh/config
Host *
  UseKeychain yes
  AddKeysToAgent yes
  IdentityFile ~/.ssh/id_rsa

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

答案 13 :(得分:4)

此答案主要适用于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

您可以遍历日志中的每个步骤,以直观了解问题的根源。


在(a)情况下的故障排除

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

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

     ssh-agent bash -c 'ssh-add ~/.ssh/anotherKey; git clone ssh://pathToYourRepo'
    

(b)情况下的故障排除

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

(c)的故障排除

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

答案 14 :(得分:3)

我已经设置了密码,但由于某种原因,它不再能识别它。所以我刚刚使用ssh-add -K将身份文件添加到我的钥匙串中,并且它停止询问我的密码。

答案 15 :(得分:2)

这对我有用:

git config --global core.sshCommand "'C:\Windows\System32\OpenSSH\ssh.exe'"

答案 16 :(得分:2)

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

# ssh-add: illegal option -- K

通过运行ssh-add,可以查看所拥有的which ssh-add版本。

(我的矿藏在/usr/local/bin/ssh-add中)

要解决此问题,我必须将密钥指向Apple的版本

/usr/bin/ssh-add -K ~/.ssh/id_rsa

Git / GitHub之后运行良好。有关更多信息,请参见:Error: ssh-add: illegal option -- K

答案 17 :(得分:2)

LinuxMint / Ubuntu

中工作

执行以下步骤

第1步:

  

转到文件=> /。ssh / config

将以下几行保存到文件中

Host bitbucket.org
    HostName bitbucket.org
    User git
    IdentityFile /home/apple/myssh-privatekey
    AddKeysToAgent yes
  

不要忘记添加此行 AddKeysToAgent是

第2步:

打开终端,然后将密钥集添加到 ssh-add

$ ssh-add -k /home/apple/myssh-privatekey

提供密码短语。

答案 18 :(得分:2)

您需要使用ssh代理。
简短答案:尝试

ssh-add

在按下之前。在询问时提供您的密码。

  

在此处查看原始StackExchange答案   https://unix.stackexchange.com/a/12201/268450

答案 19 :(得分:2)

问题似乎是因为您从HTTPS而不是SSH进行克隆。我在这里尝试了所有其他解决方案,但仍然遇到问题。这样做对我来说。

像这样使用osxkeychain helper

  1. 了解您是否安装了它。

    git credential-osxkeychain

  2. 如果未安装,系统会提示您将其作为Xcode命令行工具的一部分下载。

  3. 如果已安装,请告诉Git使用全局osxkeychain helper配置使用credential.helper

    git config --global credential.helper osxkeychain

  4. 下次克隆HTTPS网址时,系统会提示您输入用户名/密码,并授予对OSX钥匙串的访问权限。在您第一次执行此操作后,它应保存在您的钥匙串中,您不必再次输入它。

答案 20 :(得分:1)

通常,以下是允许您使用不带密码的ssh远程连接到服务器的步骤:

  • 创建一对rsa私钥和公钥

    import {Things, You, Need} from 'react-native'
  • 复制公共密钥并登录到远程服务器

  • 将公共密钥添加到.ssh / authorized_keys

  • 如果您的计算机中有多个ssh密钥,则可以使用ssh-add添加您的密钥

    $ ssh-keygen -t rsa -b 4096 -C "your comments"

  • 然后尝试ssh到您的服务器

    $ ssh-add /path/to/private/key

来源:http://diary-of-programmer.blogspot.com/2018/08/tips-how-to-ssh-to-your-digitalocean.html

答案 21 :(得分:1)

如果您以前使用过GIT进行密码身份验证,但现在使用SSH身份验证,则需要switch remote URLs from HTTPS to SSH

git remote set-url origin git@github.com:USERNAME/REPOSITORY.git

答案 22 :(得分:1)

我想为那些可能仍然需要进入的人添加一个答案 密码,因为他们已设置 身份只有是。这可能是由多个密钥和身份文件引起的,它们是git或服务器的密钥。

生成密钥并将其复制到服务器后:

ssh-keygen
ssh-copy-id -i ~/.ssh/12gpu_server.pub lerner@192.168.20.160

我发现它没有用。

然后我去查看~/.ssh/config文件,我看到了这个 底部:

Host *
IdentitiesOnly yes

然后我在上面添加:

Host 12gpu
HostName 192.168.20.160
User lerner
IdentityFile ~/.ssh/12gpu_server

我只需输入ssh 12gpu即可登录。

然后,您可以使用自己喜欢的名称添加多个ssh密钥 只需要将上述四行设置添加到配置中 文件。

主机是您在连接服务器时要输入的名称 后来; HostName 是服务器的IP或域名,如github.com; 用户是您记录的用户名 在服务器中像github或gitlab的用户名或git; IdentityFile 是您存储的文件 你生成的关键。

答案 23 :(得分:0)

Cloning a Git repo from VSTS over SSH asks a password! Unexpected

中所述

问题可能是由于公共密钥身份验证失败,因此它要求输入mycompany帐户的密码。

如果公钥身份验证成功,则不会发生这种情况。

因此您可以检查id_rsa.pub甚至创建一个新的。

答案 24 :(得分:0)

添加到以上答案。 必须在Windows上再做一步,以使git能够使用ssh-agent。

必须在powershell中运行以下命令来更新环境变量:

PS> [Environment] :: SetEnvironmentVariable(“ GIT_SSH”,“ $((Get-Command ssh).Source)”,[System.EnvironmentVariableTarget] :: User)

重新启动VSCode,Powershell或用于激活env变量的任何终端。

完整的说明可以在[here](https://snowdrift.tech/cli/ssh/git/tutorials/2019/01/31/using-ssh-agent-git-windows.html)中找到。

答案 25 :(得分:0)

对我有用的方式(Windows 10)

  1. 从应用程序打开 git-gui
  2. 帮助
  3. 显示 ssh 密钥
  4. 生成 ssh 密钥
  5. 将 ssh 密钥复制到 git provider

这样我们保证git客户端指向有效的ssh

答案 26 :(得分:0)

SSH Key - Still asking for password and passphrase

如果在Windows上并使用PuTTY作为SSH密钥生成器,那么这种快速简便的解决方案对我来说是使用纯Windows命令行的唯一可行解决方案:

  1. 您的PuTTY安装应随附几个可执行文件,其中包括pageant.exeplink.exe
  2. 使用PuttyGen生成SSH密钥时,密钥以.ppk扩展名存储
  3. 运行"full\path\to\your\pageant.exe" "full\path\to\your\key.ppk"(必须用 引起来)。这将执行pageant服务并注册您的密钥(输入密码后)。
  4. 设置环境变量GIT_SSH=full\path\to\plink.exe不能引用)。这会将与git ssh-communication相关的命令重定向到plink,该命令将使用pageant服务进行身份验证,而无需再次询问密码。

完成!

注1: This documentation在使用GIT_SHH环境变量设置时会警告某些特殊性。我可以pushpullfetch,并在命令中添加任意数量的附加参数,一切对我来说都很好(不需要编写其中建议的任何额外脚本)。

注2:PuTTY的安装路径通常在PATH中,因此可以省略。无论如何,我更喜欢指定完整路径。

自动化:

在从命令行使用git之前,可以运行以下批处理文件。它说明了设置的用法:

git-init.bat
   @ECHO OFF
   :: Use start since the call is blocking
   START "%ProgramFiles%\PuTTY\pageant.exe" "%HOMEDRIVE%%HOMEPATH%\.ssh\id_ed00000.ppk"
   SET GIT_SSH=%ProgramFiles%\PuTTY\plink.exe

无论如何,我在GIT_SSH中设置了SystemPropertiesAdvanced.exe > Environment variables变量,并添加了pageant.exe作为Run注册表项(*)。

(*)添加Run注册表项的步骤>

  1. 运行regedit.exe
  2. 导航到HKEY_CURRENT_USER > Software > Microsoft > Windows > CurrentVersion > Run
  3. 执行(菜单)Edit > New > String Value
  4. 输入一个任意(但唯一)的名称
  5. 执行(菜单)Edit > Modify...(或双击)
  6. 输入到pageant.exepublic key的引号引起来的路径,例如"C:\Program Files\PuTTY\pageant.exe" "C:\Users\username\.ssh\id_ed00000.ppk"(注意%ProgramFiles%等变量在这里不起作用,除非选择{{1 }}代替步骤3中的Expandable string value

答案 27 :(得分:0)

Mobaxterme有一个UI界面

setting > configuration > SSH > SSH Agent > [check] Use internal SSH agent "moboAgent" > add [your id_rsa and restart mobaxterme to set changes]

答案 28 :(得分:0)

对我来说同样的问题,解决方案是:

请参阅此github文档,将远程的URL从https转换为ssh。要检查远程URL是ssh还是https,请使用git remote -v。要从https切换到ssh:git remote set-url origin git@github.com:USERNAME / REPOSITORY.git @jeeYem

答案 29 :(得分:0)

如果您使用Windows和GIT 没有第三方工具且密码不安全,请使用密码/密码:

  1. 环境变量 HOME 必须设置为您的用户个人资料(例如C:\ Users \ Laptop)
  2. 转到C:\ Users \ Laptop \ .ssh \文件夹和编辑“配置”文件(或创建文件!)示例:C:\ Users \ Laptop.ssh \ config(注意:最后没有。)
  3. 将git-server主机添加到“config”文件中,如下所示:

    #Example host entry
    Host myhostname.com
        HostName myhostname.com
        User git
        IdentityFile c:/users/laptop/.ssh/id_rsa.pub
        PasswordAuthentication no
        Port 422
    
  4. 保存文件并克隆存储库,如下所示:

    git clone ssh://myhostname.com/git-server/repos/picalc.git

  5. 您可以为“config”文件主机条目使用其他配置参数。这些可以在您的本地git安装文件夹中找到,例如“ C:\ Program Files \ Git \ etc \ ssh \ ssh_config ”。摘录:

    # Host *
    #   ForwardAgent no
    #   ForwardX11 no
    #   RhostsRSAAuthentication no
    #   RSAAuthentication yes
    #   PasswordAuthentication yes
    #   HostbasedAuthentication no
    #   GSSAPIAuthentication no
    #   GSSAPIDelegateCredentials no
    #   BatchMode no
    #   CheckHostIP yes
    #   AddressFamily any
    #   ConnectTimeout 0
    #   StrictHostKeyChecking ask
    #   IdentityFile ~/.ssh/identity
    #   IdentityFile ~/.ssh/id_rsa
    #   IdentityFile ~/.ssh/id_dsa
    #   IdentityFile ~/.ssh/id_ecdsa
    #   IdentityFile ~/.ssh/id_ed25519
    #   Port 22
    #   Protocol 2
    #   Cipher 3des
    #   Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc
    #   MACs hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160
    #   EscapeChar ~
    #   Tunnel no
    #   TunnelDevice any:any
    #   PermitLocalCommand no
    #   VisualHostKey no
    #   ProxyCommand ssh -q -W %h:%p gateway.example.com
    #   RekeyLimit 1G 1h
    

答案 30 :(得分:0)

使用Github提供的ssh远程网址https

答案 31 :(得分:0)

如果您正在使用ssh url for git,当提示输入ssh的密码时,请将用户名设置为“ git ”,将密码设置为系统的登录密码

答案 32 :(得分:-1)

我认为@sudo bangbang的答案应该被接受。

生成ssh密钥时,当提示您配置密码时,您只需按“ Enter”以跳过键入密码。

这意味着您在使用ssh密钥时不需要密码,因此请记住在生成ssh密钥时,请勿输入密码,只需按Enter键即可跳过它。