设置SSH密匙(免密码)登录Debian系统

我们常使用 SSH 控制远程主机(如 Debian 系统)。常用的 SSH 登录方式有密码和密匙两种,从安全方面考虑,推荐使用密匙方式登录。
密匙分为公钥和私钥,这两个秘钥可以互为加解密,其中公钥是公开的,需要对外分发给远程主机;私钥是保密的,必须只有生成这个私钥的人才能拥有。
SSH 公钥(免密)登录过程详解

- 客户端用户必须手动地将自己的公钥添加到服务器一个名叫 authorized_keys 的文件里。
- 客户端发起登录请求,并且发送一个自己公钥的指纹(具有唯一性,但不是公钥)。
- 服务端根据指纹检测此公钥是否保存在 authorized_keys 中。
- 若存在,服务端便生成一段随机字符串,然后利用客户端公钥加密并返回。
- 客户端收到后,用自己的私钥解密得到随机字符串,发送给服务器。
- 服务端收到后,对比随机字符串。如果为同一字符串,则验证通过。
我们以在 Windows 端通过 SSH 登录 Debian 远程主机讲解如何实现免密登录。远程主机的信息如下:
用户名:root
IP 地址:123.123.123.123
端口号:52122
设置远程主机允许密匙登录
修改 /etc/ssh/sshd_config 文件,启用以下参数:
|
|
修改完配置文件,重启 SSH 服务:
|
|
Windows 端生成公钥和私钥
在 Windows 本地系统终端执行下面命令:
|
|
生成的密钥文件是 id_rsa 和 id_rsa.pub,默认保存在当前登录用户的根目录下的 .ssh 目录中(C:\Users\[用户名]\.ssh)
id_rsa 文件是私钥,必须避免任何形式的传输(网络、U 盘拷贝等),并且不共享给任何人。
复制公钥到远程主机
当您希望使用密钥进行 SSH 身份验证时,您需要将您的公钥添加到远程主机的 authorized_keys 文件中。authorized_keys 用于存储允许访问该服务器的每个客户端的公钥,只有在 authorized_keys 文件中列出的公钥,才能成功进行身份验证并获得访问权限。
方法一:使用命令(在 Windows 本地系统操作)
Linux 系统中使用 ssh-copy-id 命令将本地当前登录用户的公钥复制到远程主机的 authorized_keys 文件中。
|
|
Windows 系统不支持 ssh-copy-id 命令,在终端执行以下命令来复制公钥到远程主机的 authorized_keys 文件中。
|
|
确保对远程主机上的 ~/.ssh 目录和 ~/.ssh/authorized_keys 文件设置正确的权限,否则公钥验证不生效。
|
|
方法二:人工操作(在远程主机操作)
如果方法一中的命令不可用,可以人工操作,手动将 Windows 端的本地当前登录用户的公钥内容复制到远程主机的 ~/.ssh/authorized_keys 文件中(~ 表示用户目录)。
先将公钥 id_rsa.pub 文件上传至 Linux 服务器,我使用的是开源的 WindTerm,自带文件管理器功能,可直接拖拽进行上传。
假设我们直接上传到 root 用户根目录,则路径为 /root/id_rsa.pub 或 /~/id_rsa.pub。
|
|
在 Windows 端验证免密登录
在 Windows 本地系统终端中执行以下命令:
|
|
如果可以正常登陆,则表明免密登录设置成功。
设置远程主机禁用密码登录
修改 /etc/ssh/sshd_config 文件,启用以下参数:
|
|
修改完配置文件,重启 SSH 服务:
|
|
正确取消免密登录
由于公钥与私钥成对出现才能实现免密登录,那么只需要破坏这种成对关系就可以了,比如去掉公钥授权。
备份 authorized_keys 文件:
|
|
修改 authorized_keys 文件,删除对应的公钥内容:
|
|
常见问题
错误提示“Permission denied (publickey)”
复制新客户端的公钥到远程主机时,会出现这个错误提示。原因可能有:
- 远程主机禁用了 ssh 密码登录权限。
- 客户端访问远程主机的公钥没有添加或者被取消(无法认证)。
- 远程主机的公钥文件夹权限错误。
解决方案:
- 对于第 1、2 个原因,我们需要将新客户端的公钥添加到远程主机,有两种方式:
- 使用已经认证的客户端登录远程主机,将新客户端的公钥添加到远程主机的
~/.ssh/authorized_keys文件中。 - 或者将新客户端的公钥发给远程主机管理员,由其协助完成公钥验证。
- 使用已经认证的客户端登录远程主机,将新客户端的公钥添加到远程主机的
- 对于第 3 个原因,确保对远程主机上的
~/.ssh目录权限为 700,~/.ssh/authorized_keys文件权限为 600。设置权限的命令如下:
|
|
如何在宝塔面板中快速完成相关设置
对于已经安装宝塔面板的用户,确实可以方便设置:
1、在【安全】→【SSH 管理】中,快速设置 SSH 端口号、ROOT 登录方式、密码登录(禁用)、密匙登录(启用)参数,详细设置如下图:

2、在【文件】菜单中,找到用户路径下的 authorized_keys 文件,将公钥添加到这个文件中。
