一、背景以及问题
今天有同事用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
创建会话并尝试连接。
打勾的地方就是需要勾选的,记得勾选完把本地的私钥文件地址放进去。
这样整个流程就搞定了