关于git:SSH密钥 – 仍然要求输入密码和密码

SSH Key - Still asking for password and passphrase

我对Github有点"容忍",克隆存储库时总是要求输入用户名和密码。我想绕过这一步,因为这是我工作流程中的一个麻烦。

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

我的问题是,在克隆存储库(使用ssh)时,仍然需要我的github密码和密码。我的理解是,在设置了这个ssh密钥之后,我将不再需要这样做。

我有点不确定该问什么,所以我只会陈述我的目标。

I want to be able to clone repositories without having to put in my Github information all the time.

我的ssh密钥缺少什么?如果有人能提供一些指导或资源,我会很感激的,因为在Github的ssh身份验证方面,我总是感到有点失落。

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

1
2
3
4
~ $ ssh -T [email protected]
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.

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


添加不带钥匙链的标识

有时您可能不希望密钥链中存储密码短语,但不希望反复输入密码短语。

你可以这样做:

1
ssh-add ~/.ssh/id_rsa

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

使用钥匙链添加标识

正如@dennis在评论中指出的那样,要通过重新启动来保持密码短语,并将其存储在您的密钥链中,在添加这样的标识时,您可以使用-K选项(-K):

1
ssh-add -K ~/.ssh/id_rsa

再次,这将要求您输入密码短语,这一次它将不再要求这个身份。


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

1
ssh-add -K /path/to/private_key

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

1
ssh-add -K ~/.ssh/id_rsa

然后将提示您输入密码,密码将存储在您的钥匙链中。

编辑-句柄重新启动

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

1
2
3
4
Host *
  UseKeychain yes
  AddKeysToAgent yes
  IdentityFile ~/.ssh/id_rsa


我在这里试过所有的答案,但这些答案都无效!在Mac的会话/重新启动之间,我的密码不会保持不变。

通过阅读OpenRadar和Twitter上的讨论,我发现苹果有意改变Macos10.12 Sierra中ssh代理的行为,不再自动加载以前的ssh密钥。为了保持与El Cap相同的行为,我执行了以下操作:

  • ssh-add -K ~/.ssh/id_rsa注意:将路径更改为您的id_rsa密钥所在的位置。
  • ssh-add -A
  • 创建(或编辑)以下~/.ssh/config文件:

    1
    2
    3
    4
    Host *
      UseKeychain yes
      AddKeysToAgent yes
      IdentityFile ~/.ssh/id_rsa
  • 现在我的密码会在重启Mac之间被记住!


    如果您使用HTTPsURL,它将始终要求您输入用户名/密码。

    如果克隆/设置远程设备时正确使用SSH。然后确保您有一个ssh代理来记住您的密码。这样,终端会话只需输入一次密码短语。

    如果仍然很烦人,那么只需设置一个没有密码的ssh密钥。


    您可以删除密钥的密码。

    1
    $ ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]

    或者你可以跑

    1
    $ ssh-keygen -p

    你会得到一个关键文件提示。默认情况下,它是~/.ssh/id_rsa,所以按Enter键。

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

    然后将提示输入新的通行短语,按Enter键。


    只需运行以下命令:

    1
    ssh-add -K

    它不会再要求您输入密码。


    确保您的存储库也使用ssh

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

    enter image description here

    不要使用https,如果你的远程使用https,那么它会不断地请求密码,即使你已经将公钥添加到github,并将私钥添加到ssh代理。下面将始终询问密码

    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)


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

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

    它将在第二个命令中请求密码,就这样。


    我不得不执行:

    1
    2
    eval `ssh-agent -s`
    ssh-add

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

    这里找到了解决方案。


    试一下ssh-agent,这里有解释:https://help.github.com/articles/working-with-ssh-key-passphrases


    这个答案对我在江户十分有用。

    请参阅此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 [email protected]:USERNAME/REPOSITORY.git


    对于Mac OSX Sierra,我发现在Github的开放雷达问题中建议的修复方法解决了我的问题。似乎Sierra改变了默认行为(升级后我开始出现这个问题)。

    我发现这个特别有用:https://github.com/lionheart/openradar mirror/issues/15361问题注释-249059061

    1
    ssh-add -A

    这导致在我运行之后我的身份被添加到代理

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

    总结一下,在OSX.12中:

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

    应导致:

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

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

    1
    2
    3
    4
    5
    $ cat ~/.ssh/config
    Host *
      UseKeychain yes
      AddKeysToAgent yes
      IdentityFile ~/.ssh/id_rsa

    您可以根据需要添加任意多的IdentityFile条目,但这是默认设置。这是上面OpenRadar链接(ATM)上的"趋势"答案。


    我已经设置了一个密码,但出于某种原因,它再也认不出来了。所以我再次使用ssh-add -K将身份文件添加到我的钥匙链中,它不再要求我输入密码。


    问题似乎是因为您是从https而不是ssh克隆的。我在这里尝试了所有其他解决方案,但仍然遇到问题。这是为我做的。

    像这样使用osxkeychain helper

  • 看看你是否安装了它。

    git credential-osxkeychain

  • 如果没有安装,将提示您下载它作为Xcode命令行工具的一部分。

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

    git config --global credential.helper osxkeychain

  • 下次克隆HTTPS URL时,系统将提示您输入用户名/密码,并授予对OSX密钥链的访问权限。在你第一次这样做之后,它应该保存在你的钥匙链中,你不需要再次输入它。


    在LinuxMint/Ubuntu工作

    执行以下步骤

    步骤1:

    Goto file => /.ssh/config

    将以下行保存到文件中

    1
    2
    3
    4
    5
    Host bitbucket.org
        HostName bitbucket.org
        User git
        IdentityFile /home/apple/myssh-privatekey
        AddKeysToAgent yes

    Don't forget to add this line AddKeysToAgent yes

    步骤2:

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

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

    提供密码短语。


    我最近升级到了MacOS Mojave,并通过自制安装了一些工具,似乎用苹果版本的ssh-add换了另一个。我的默认BSD版本的ssh-add没有-K选项。这导致以下错误:

    # ssh-add: illegal option -- K

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

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

    为了解决这个问题,我必须指出苹果版本的关键:

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

    Git/Github后来工作得很好。有关详细信息,请参阅:error:ssh add:invalid option--k


    我想为那些仍然需要输入因为他们已经设置了密码和是一样。这可能是由多个密钥和标识文件(Git或服务器的密钥)引起的。

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

    1
    2
    ssh-keygen
    ssh-copy-id -i ~/.ssh/12gpu_server.pub [email protected]

    我发现它不起作用。

    然后我去查看~/.ssh/config文件,我在底部:

    1
    2
    Host *
    IdentitiesOnly yes

    然后我在上面加上:

    1
    2
    3
    4
    Host 12gpu
    HostName 192.168.20.160
    User lerner
    IdentityFile ~/.ssh/12gpu_server

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

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

    主机是连接到服务器时要输入的名称稍后;主机名是服务器的IP或域,如github.com;用户是您记录的用户名在服务器中,比如用户名或github或gitlab的git;IdentityFile是存储生成的密钥。


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

    • 创建一对RSA私钥和公钥

      1
      $ ssh-keygen -t rsa -b 4096 -C"your comments"
    • 复制公钥并登录到远程服务器

    • 将您的公钥添加到.ssh/授权密钥

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

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

    • 然后尝试在服务器上使用ssh

      $ ssh username@your_ip_address

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


    如果您使用的是不带第三方工具的Windows和Git,并且您的密钥不受密码/密码短语的保护,请使用:

  • 环境变量home必须设置为用户配置文件(例如c:userslaptop)
  • 转到c:userslaptop.sshfolder并编辑"config"文件(或创建该文件!)示例:c:userslaptop.sshconfig(注意:没有。最后!)
  • 将Git服务器主机添加到"config"文件中,如下所示:

    1
    2
    3
    4
    5
    6
    7
    #Example host entry
    Host myhostname.com
        HostName myhostname.com
        User git
        IdentityFile c:/users/laptop/.ssh/id_rsa.pub
        PasswordAuthentication no
        Port 422
  • 保存文件并像这样克隆存储库:

    git克隆ssh://myhostname.com/git-server/repos/picalc.git

  • 您可以为"config"文件主机条目使用其他配置参数。这些可以在本地git安装文件夹中找到,例如"c:program filesgitetcsshsshu config"。Excerpt:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    # 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,[email protected],hmac-ripemd160
    #   EscapeChar ~
    #   Tunnel no
    #   TunnelDevice any:any
    #   PermitLocalCommand no
    #   VisualHostKey no
    #   ProxyCommand ssh -q -W %h:%p gateway.example.com
    #   RekeyLimit 1G 1h


    对我来说,同样的问题和解决办法是:

    请参阅此github文档以将远程的URL从https转换为ssh。要检查远程的URL是ssh还是https,请使用git remote-v.从https切换到ssh:git remote set url origin [email protected]:username/repository.git@jeeyem


    MobaxTerme有一个用户界面

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


    如果您使用的是用于git的ssh url,当提示输入ssh密码时,将用户名设置为"git",密码设置为系统的登录密码。


    使用Github提供的ssh远程URL,而不是https远程URL。