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在评论中指出的那样,要通过重新启动来保持密码短语,并将其存储在您的密钥链中,在添加这样的标识时,您可以使用
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相同的行为,我执行了以下操作:
创建(或编辑)以下
1 2 3 4 | Host * UseKeychain yes AddKeysToAgent yes IdentityFile ~/.ssh/id_rsa |
现在我的密码会在重启Mac之间被记住!
如果您使用
如果克隆/设置远程设备时正确使用
如果仍然很烦人,那么只需设置一个没有密码的ssh密钥。
您可以删除密钥的密码。
1 | $ ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile] |
或者你可以跑
1 | $ ssh-keygen -p |
你会得到一个关键文件提示。默认情况下,它是
系统将提示您输入当前密码短语"输入"。
然后将提示输入新的通行短语,按Enter键。
只需运行以下命令:
1 | ssh-add -K |
它不会再要求您输入密码。
确保您的存储库也使用ssh
origin [email protected]:eMahtab/jenkins-cje-2017.git (fetch)
origin [email protected]:eMahtab/jenkins-cje-2017.git (push)
不要使用https,如果你的远程使用https,那么它会不断地请求密码,即使你已经将公钥添加到github,并将私钥添加到ssh代理。下面将始终询问密码
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 |
注意:每次重新启动后都必须再次执行此操作。
这里找到了解决方案。
试一下
这个答案对我在江户十分有用。
请参阅此github文档以将远程的URL从https转换为ssh。https://help.github.com/articles/changing-a-remote-s-url/
要检查远程的URL是ssh还是https,请使用
要从https切换到ssh:
对于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上面提到的:创建一个
1 2 3 4 5 | $ cat ~/.ssh/config Host * UseKeychain yes AddKeysToAgent yes IdentityFile ~/.ssh/id_rsa |
您可以根据需要添加任意多的
我已经设置了一个密码,但出于某种原因,它再也认不出来了。所以我再次使用
问题似乎是因为您是从https而不是ssh克隆的。我在这里尝试了所有其他解决方案,但仍然遇到问题。这是为我做的。
像这样使用
看看你是否安装了它。
如果没有安装,将提示您下载它作为Xcode命令行工具的一部分。
如果已安装,请告诉Git使用全局
下次克隆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,并通过自制安装了一些工具,似乎用苹果版本的
您可以通过运行
(我的矿藏在
为了解决这个问题,我必须指出苹果版本的关键:
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] |
我发现它不起作用。
然后我去查看
1 2 | Host * IdentitiesOnly yes |
然后我在上面加上:
1 2 3 4 | Host 12gpu HostName 192.168.20.160 User lerner IdentityFile ~/.ssh/12gpu_server |
我只需输入
然后,您可以使用您喜欢的名称添加多个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,并且您的密钥不受密码/密码短语的保护,请使用:
将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有一个用户界面
如果您使用的是用于git的ssh url,当提示输入ssh密码时,将用户名设置为"git",密码设置为系统的登录密码。
使用Github提供的