SSH键-仍然要求密码和密码

当我克隆存储库时,我有点“忍受”Github总是询问我的用户名和密码。我想绕过这一步,因为它是我工作流程中的一个烦恼。

我尝试使用本指南设置SSH密钥(我成功地做到了)。

我的问题是,在克隆存储库(使用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.

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

797261 次浏览

如果您使用HTTPs URL,它总是会询问您的用户名/密码。这可以使用@Manavalan Gajapathy的评论(复制到此处)来解决:

请参阅此github文档将远程的URL从https转换为ssh。要检查远程的URL是ssh还是https,请使用git remote -v。要从https切换到ssh:

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

如果您在克隆/设置遥控器时正确使用了SSH:请确保您有一个ssh代理来记住您的密码(请参阅@Komu的这个答案)。这样,您只需通过终端会话输入一次密码。

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

无需钥匙串添加身份

有时您可能不希望密码短语存储在钥匙链中,但也不希望一遍又一遍地输入密码短语。

你可以这样做:

ssh-add ~/.ssh/id_rsa

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

使用钥匙串添加身份

正如@denennis在评论中指出的那样,要通过将其存储在钥匙串中来通过重新启动来保留密码短语,您可以在添加身份时使用--apple-use-keychain选项(-k for Ubuntu),如下所示:

ssh-add --apple-use-keychain ~/.ssh/id_rsa

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

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

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

您可以删除密钥的密码

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

或者你可以跑

$ ssh-keygen -p

你会得到一个密钥文件的提示。默认情况下它~/.ssh/id_rsa,所以按回车键

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

然后会有一个新密码短语的提示,按回车键

在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

对于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条目,但这是默认设置。这也是上面的open雷达链接、ATM上的“趋势”答案。

我尝试了这里的所有答案和这些答案都没用!我的密码在Mac的会话/重启之间不会保留。

我从阅读这个OpenRadar这次推特讨论中发现,macOS 10.12 Sierra中的苹果故意改变了行为 for ssh代理不再自动加载以前的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
    

And now my password is remembered between restarts of my Mac!

只需运行以下命令:

ssh-add -K

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

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

mahtab@mahtab-Lenovo-G50-70:~/my-项目/jenkins-cje-2017$git远程-v 来源git@github.com:eMahtab/jenkins-cje-2017.git(获取) 起源git@github.com:eMahtab/jenkins-cje-2017.git(推送)

在此处输入图片描述

不要使用https,如果您的远程使用https,那么它会一直询问密码,即使您已将公钥添加到Github并将私钥添加到ssh-agent。下面将始终询问密码

mahtab@mahtab-Lenovo-G50-70:~/my-项目/jenkins-cje-2017$git远程-v 原点https://github.com/eMahtab/jenkins-cje-2017.git 原点https://github.com/eMahtab/jenkins-cje-2017.git(推送)

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

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

像这样使用osxkeychain helper

  1. 看看你是否安装了它。

    git credential-osxkeychain

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

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

    git config --global credential.helper osxkeychain

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

我想为那些可能仍然需要输入的人添加一个答案 密码,因为他们设置了 标识仅作为是。这可能是由多个密钥和身份文件引起的,它们是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密钥,并且您 只需要在配置中添加上面四行这样的设置 文件。

主机是您连接到服务器时要输入的名称 主机名是服务器的IP或域,如github.com;用户是您登录的用户名 在服务器中,例如github或gitlab的用户名或git;身份文件类型是您存储 您生成的密钥。

如果您是使用windows和git没有第三方工具,并且您的密钥是没有担保通过密码/密码使用:

  1. 环境变量HOME必须设置为您的用户配置文件(例如C:\用户\笔记本电脑)
  2. 转到C:\用户\笔记本电脑\. ssh\文件夹和编辑配置文件(或创建文件!)示例:C:\用户\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. Save the file and clone the repository like this:

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

You can use additional configuration parameters for the "config" file host entry. These can be found in your local git installation folder, e.g. "C:\Program Files\Git\etc\ssh\ssh_config". Excerpt:

# 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

如果你使用Windows,这对我很有用:

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

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

将这些行添加到您的bash配置文件$HOME/.bash_profile$HOME/.bashrc

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

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

Mobaxterme有一个UI界面

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

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

  • 创建一对rsa私钥和公钥

    $ ssh-keygen -t rsa -b 4096 -C "your comments"
    
  • Copy your public key and login to your remote server

  • Add your public key to .ssh/authorized_keys

  • If you have multiple ssh keys in your computer you might to add your key using ssh-add

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

  • Then try ssh to your server

    $ ssh username@your_ip_address

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

我必须执行:

eval `ssh-agent -s`
ssh-add

说明:您必须在每次重启后再次执行此操作。如果您想避免它,请将其输入到Windows上C:\Users\<<USERNAME>>\.bashrc中的“. bashrc”文件中。它可能是隐藏的,所以请确保您可以看到隐藏的文件。

找到解决方案这里

工作在LinuxMint/Ubuntu

执行以下步骤

步骤1:

转到文件=>/.ssh/config

将以下行保存到文件中

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

不要忘记添加这一行AddKeysToAgent是

步骤2:

打开终端并将键集添加到ssh添加

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

提供密码。

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

# ssh-add: illegal option -- K

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

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

为了解决这个问题,我必须指向Apple版本的密钥

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

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

这是什么为我工作:

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

太长别读
您需要使用ssh代理。为此,打开终端&在推送到git之前,执行

ssh-add

出现提示时输入密码。

查看原始StackExchange答案这里

SSHKey-仍在询问密码和密码

如果在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通信相关的命令重定向到plink,该命令将使用pageantservice进行身份验证,而无需再次询问密码。

成交!

注1:这个留档警告使用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

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

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

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

通过SSH从VSTS克隆Git存储库需要密码!意外所述

问题可能是因为公钥认证失败,所以它会要求我的公司帐户的密码。

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

所以你可以检查id_rsa.pub,甚至创建一个新的。

这个答案主要针对Windows用户,如果您在任何其他操作系统上使用tfs、github或gitlab克隆时遇到问题,也同样相关。

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

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

a)ssh代理找不到id_rsa的默认私钥文件,并且没有显式指定其他键路径。

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

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

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

GIT_TRACE=1 GIT_SSH_COMMAND="ssh -vvv" git clone ssh://pathToYourRepo

您可以遍历日志中的每一步,以获得对问题可能是什么的直觉。


(a)情况下的故障排除

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

  • 如果您想指定不同的密钥进行身份验证,请使用以下命令:

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

(b)情况下的故障排除

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

(c)情况下的故障排除

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

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

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

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

ssh-add

确保ssh公钥(例如~/. ssh/id_rsa.pub)是您在存储库设置中拥有的。

确保您实际上可以ssh到服务器中,例如对于比特桶:

ssh -T git@bitbucket.org

更新URL以从https移动到ssh。您可以通过检查以下输出来检查您使用的网址:

git remote -v

如果您在URL中看到https://,则说明您仍在使用https。要更新它:获取URL并将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

添加到上述答案。 必须在Windows上再做一步才能让git使用ssh-agent。

必须在Powershell中运行以下命令才能更新环境变量:

PS>[环境]::设置环境变量("GIT_SSH","$((Get-命令ssh). Source)",[System.的环境变量]::用户)

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

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

我的工作方式(Windows 10)

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

通过这种方式,我们保证git客户端指向有效的ssh

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

检查它是如何验证的,如下所示。

$ git remote -v
> origin  https://github.com/USERNAME/REPOSITORY.git (fetch)
> origin  https://github.com/USERNAME/REPOSITORY.git (push)

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

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

再测试一次

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

就这样。现在可以了。