浅谈ssh时出现的Error: Permission denied (publickey):

浅谈ssh时出现的Error: Permission denied (publickey)

1、使用ssh key的时候出现的问题排错:

1.1 基本的操作流程:

按照流程来:

点击github上的 Settings 。然后,选择 SSH and GPG keys选项。最后,在SSH keys上选择 New SSH key,然后将生成的公钥信息复制上去即可。

创建ssh公钥:

打开终端。输入 ssh-keygen -t rsa -C "email_address" 然后,回车按照提示的要求输出密码即可;

检验成功:

ssh git@github.com

当出现:

Hi gays! You've successfully authenticated, but GitHub does not provide shell access.

便意味着成功了。

1.2、出现的问题:

当然,不是每次都会成功的,当我们出现如下的问题的时候:
Error: Permission denied (publickey)

根据官方给出的排错思路是:

先使用 ssh -vT git@github.com
查看对应的port是否为22? 如果是的话,下面查看是否是代理出现问题(踩过坑);
如果对应的ssh-agent没有开启的话,会报Permission denied的问题;
查看:Get-Service -Name ssh-agent
若对应的输出为:

Status   Name               DisplayName
Stopped  ssh-agent          OpenSSH Authentication Agent

我们发现就是代理出现了问题,我们下面使用如下的指令来进行代理的设置:

Get-Service -Name ssh-agent | Set-Service -StartupType Manual
Start-Service ssh-agent

然后检查,ssh-add -l 是否将对应的私钥加载到ssh中了:
若输出的结果为:
The agent has no identities.
那么,下面我们再将对应的私钥添加载到ssh中:
ssh-add /path
然后,再次检查ssh-add -l查看私钥是否被加载到ssh中,若此时已经由字符串显示,则加载成功,后面在使用:
ssh -T git@github.com
就会出现:
Hi gays! You've successfully authenticated, but GitHub does not provide shell access.

这也就标志着我们的成功;

但是!!!所有的结论真的向我们所想的这样吗????

下面来做实验,检查一下:

2、实验:

  • 基础知识理解:
    • Get-Service:获取当前的服务的状态;
    • Set-Service:设置当前的服务的状态;
    • Start-Service:开启服务;
    • Stop-Service:关闭服务;

关于对应的指令的内容,给出如下的官网说明https://learn.microsoft.com/zh-cn/powershell/module/microsoft.powershell.management/set-service?view=powershell-7.4

2.1、ssh-agent必须要开吗?

【实验步骤】:

​ 当我的github上只有一个公钥的时候,如果我不开启ssh-agent的话,是否正常工作?

【实验操作】:

S C:\WINDOWS\system32> Stop-Service ssh-agent
PS C:\WINDOWS\system32> Get-Service -Name ssh-agent

Status   Name               DisplayName
------   ----               -----------
Stopped  ssh-agent          OpenSSH Authentication Agent

PS C:\WINDOWS\system32> ssh-add -l
Error connecting to agent: No such file or directory
PS C:\Users\24498> ssh -T git@github.com
Enter passphrase for key 'C:\Users\xxxx\.ssh/id_ecdsa':			// 输入创建文件的密码即可;
Hi gays! You've successfully authenticated, but GitHub does not provide shell access.

解析一下这个ssh-agent的功能

再去,搜索一下ssh-agent的的作用:

ssh 推荐的登录方式是使用私钥登录。但是如果生成私钥的时候,设置了口令/密码(`passphrase`),每次登录时需要输入口令也很麻烦。可以通过 `ssh-agent` 来管理私钥,把私钥加载进内存,之后便不用再输入密码。

但是这个只是,这个东西的大致描述。继续深挖:

用户 Bob 使用 ssh-agent 来管理私钥之后。ssh-agent 会启动一个进程在内存里保存这些私钥。之后每次登录时,ssh 客户端都会跟 ssh-agent 请求是否有目标主机的私钥;如果有,ssh 客户端便能直接登录目标主机。

可以了,可以开始总结了:

我们将所有的私钥添加到代理中(ssh-add /path),ssh代理用自己手中已有的一堆的私钥来解密被公钥加密的密文,挨个试。知道成功,当成功的时候,便可以ssh连接上。否则,报错;所以,ssh-agent充当的就是一个钥匙管家的作用。所以,他真的必须吗?不是必须的,只能说帮助我们方便了生活。

当然,此处是由于本地只有这一个这样的私钥的,当存在多个私钥的时候,需要使用ssh指令中的-i参数来指定对应的私钥文件(就是自己找钥匙,而不是让代理来一个一个的找);

插曲:

私钥和公钥,简而言之,私钥就是钥匙,公钥就是锁。但是这个锁非常奇怪,有一个特性,我可以知道这把锁的样子,但是永远不能根据锁来制成解这把锁的钥匙,并且这把锁可以被复制,但是,就是无法制作钥匙。

所以,上述第一个部分所说的遇到的问题,就是在Enter passphrase for key 'C:\Users\24498/.ssh/id_ecdsa':这里密码输入错误,所导致的。而为啥在配置完ssh-agent之后就不需要输入呢?因为这个就是免密登录的一个玩法,也就是ssh-agent的一个好处。

PS C:\WINDOWS\system32> ssh -T git@github.com
Hi gays! You've successfully authenticated, but GitHub does not provide shell access.

3、总结:

学习的过程,总会被事物的外表所迷惑。所以,一定要多做实验,多看不同的人的文章以求搞懂自己在实验过程中使用的所有的技术。

  • 25
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 出现"Failed to connect to the host via ssh: Permission denied (publickey)"的错误提示是因为SSH连接权限被拒绝,可能是由于密钥配置不正确或者没有正确添加到系统中所致。\[1\]要解决这个问题,你可以按照以下步骤进行操作: 1. 确保你的SSH配置文件正确,包括正确指定了密钥文件和端口号等信息。 2. 检查密钥文件的权限是否正确,一般来说,私钥文件的权限应该设置为600。 3. 确保你的公钥已经正确添加到目标主机的授权文件中,一般是~/.ssh/authorized_keys文件。 4. 如果你使用了ssh-agent来管理密钥,确保ssh-agent正在运行,并且你已经将密钥添加到ssh-agent中。你可以使用"ssh-add"命令来添加密钥到ssh-agent中。\[2\] 5. 如果你使用了ansible命令进行连接,确保你在ansible的配置文件中正确指定了密钥文件和用户名等信息。同,还要确保目标主机的SSH服务已经启动,并且允许使用密钥进行连接。\[3\] 通过检查以上步骤,你应该能够解决"Failed to connect to the host via ssh: Permission denied (publickey)"的问题。如果问题仍然存在,你可以进一步检查目标主机的SSH日志以获取更多的错误信息,以便更好地定位和解决问题。 #### 引用[.reference_title] - *1* [ssh: connect to host localhost port 22: Connection refused](https://blog.csdn.net/mba1398/article/details/122829875)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Windows设置SSH出错,Permission denied (publickey),Error connecting to agent](https://blog.csdn.net/u013013023/article/details/109068239)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,pas](https://blog.csdn.net/asmartkiller/article/details/121714079)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值