本地ssh密钥连接远程服务器报错问题(CMD,wsl,MobaXterm三种连接方式)

一、背景以及问题

今天有同事用MobaXterm使用ssh公钥连接远程Linux服务器突然连不上了,先后报错信息提示了

Permissions 0444 for '(此处路径省略)/.ssh/id_rsa' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored.

Permissions 0666 for '(此处路径省略)/xingu/.ssh/id_rsa' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored.

拒绝信息,因为之前从来没遇到过,后来又尝试了CMD中ssh命令连接和本地wsl连接,都拒绝。因为之前从来没遇到过这个问题,所以还有点懵,不过还是研究解决了,分享出来,万一有遇到类似问题的可以参考下。这个问题应该是不常见,本人是这么多年第一次遇到。我估计应该是同事用其它软件连接远程,进行了一些修改导致的。

备注:本地是window系统

二、问题说明

说明一下这两个问题。

这个报错信息表明你的私钥文件 /.ssh/id_rsa 的权限设置得太宽松了。SSH 客户端要求私钥文件必须是安全的,即只能被文件所有者访问(读取和写入),而不能被其他用户或组成员访问。

0444,这表示所有用户都可以读取该文件,0666 表示所有用户(文件所有者、组成员和其他用户)都可以读取和写入该文件。

这就要求我们把多余的用户执行权限都给处理掉才行。

三、解决方法

1.私钥文件权限查看

查看当前私钥文件都有什么权限,两种方式,一种是先在本地找到私钥文件,我的私钥文件默认名时id_rsa,一般是在用户文件夹下.ssh文件夹下,如下:

打开文件夹,带pub的是公钥。鼠标点击私钥,右键,点击属性,点击‘安全’选项卡,这里展示的就是对当前私钥文件有权限的用户或组,如果下面当前用户和管理员用户,就是正确的,如下:

如果还有其它用户组存在,选中对应的用户组,点击编辑,然后在弹出的选项卡中选择删除。

另一种查看和处理权限的方式是在CMD中用命令行进行。

Win+R然后输出cmd回车,在命令行中输入whoami,回车,如下:

正常应该是只有一行内容,就是你本地当前用户的名称。如果有多余的,需要按照前面说的方法进行删除。

另一种用CMD命令行方式查看权限的方法如下(是powershell或者CMD中输入,没找到对应的插入代码块,写bash里了):

icacls "C:\Users\xingu\.ssh\id_rsa"

正常展示出来应该是只有两类,管理员和当前用户,如下:

这意味着除了你自己的账户之外,其他人都无法访问此文件。这是一个合理的设置,符合 SSH 对私钥文件的要求。

2.CMD中ssh连接

都按要求修改完之后,就可以进行CMD中的ssh连接了,连接命令格式如下,把路径替换成你的本地真实路径,服务器用户名和地址替换上,记得中间用@符号连接:

ssh -i "C:\\Users\\你的私钥路径\\.ssh\\id_rsa" 远程服务器用户名@远程服务器地址

正常来说应该能直接连上,直接就进到服务器里了,可以打个ls或者ll看下能不能看到服务器当前目录。

如果没有成功进入,可以重复前面的步骤,进行查看和修改。

3.wsl中ssh修改

在 Windows 的 CMD 中使用 SSH 可以正常连接,但在 WSL 中使用相同的私钥文件却遇到权限问题,出现0666或者0444类的权限问题,一般是是因为 WSL 和 Windows 对文件系统的处理方式不同,导致 WSL 无法正确识别或应用 Windows 上设置的文件权限。需要在wsl中再设置下。

# 在 WSL 中创建一个目录来存放私钥
mkdir -p ~/.ssh

# 将私钥文件复制到 WSL 的 ~/.ssh 目录下
cp /mnt/c/Users/真实路径地址/.ssh/id_rsa ~/.ssh/

# 设置正确的权限
chmod 600 ~/.ssh/id_rsa

# 尝试使用新的路径进行 SSH 连接
ssh -i ~/.ssh/id_rsa 远程用户名@IP地址

/mnt/c/目录是本地C盘在wsl中挂载的位置,这个一般不用改,如果你的私钥文件位置不在C盘,再做更改。

4.MobaXterm中ssh连接

有些同学可能不知道MobaXterm是什么,MobaXterm是一款常用的远程连接服务器的软件,和finallshell类似,除了正常的命令行使用,还可以直接进行文件的上传下载。我个人比较喜欢用这个。

如果你在使用 MobaXterm 通过 SSH 直接连接时仍然被要求输入密码,这可能是因为 MobaXterm 没有正确地使用你的私钥文件。采用以下步骤即可。

确保你在 MobaXterm 中明确指定了私钥文件。在创建新的 SSH 会话时,你可以手动指定私钥文件。

  • 打开 MobaXterm。
  • 点击左上角的 Session 菜单。
  • 选择 SSH 会话类型。
  • 在 Remote host 字段中输入远程主机的 IP 地址或主机名。
  • 在 Specify username 字段中输入用户名。
  • 在 Advanced SSH settings 部分,找到 Use private key 选项,并勾选它。
  • 点击浏览按钮,选择你的私钥文件(例如 C:\Users\zhangsan\.ssh\id_rsa)。
  • 点击 OK 创建会话并尝试连接。

打勾的地方就是需要勾选的,记得勾选完把本地的私钥文件地址放进去。

这样整个流程就搞定了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值