最近折腾的设备有点多,需要监控设备的运行情况,资源占用这些。
我是直接通过软件登陆SSH来查看的,简单 直接。但是很危险,尤其是使用密码来登陆的情况下。
容易被脚本小子暴力破解。安装Fail2ban可以缓解,但是并不是万无一失。

而各网站,APP的登陆密码,NAS, 路由器的后台登陆密码也是一样,太复杂 ,太多了会容易忘,搞成一样的密码容易被破解,尤其在某个网站泄密后,其他网站登陆密码你敢不改?
网站,APP的登陆密码可以使用 2FA 两步验证这些,会安全许多,或者使用自己架设BitWarden的服务来搞个及其复杂的密码来避免被暴力破解。
本文则是SSH密码登陆设备更换成密钥登陆的教程。
禁止密码登陆,使用密钥对来登陆。这样安全的多而且更方便登陆了。
对比 SSH 密钥登录 VS 账号密码登录
✅ SSH 密钥登录
方式:使用一对密钥(私钥保存在客户端,公钥配置在服务器)
优点:
安全性极高,抗暴力破解
支持自动化(如 Jenkins 自动部署)
支持无密码批量登录
缺点:
初次配置稍繁琐,需要拷贝公钥到服务器
私钥需妥善保管,丢失则无法登录
✅ SSH登录应用场景:
运维人员远程登录服务器/NAS/软路由之类
Git仓库访问(如 git@github.com)
自动部署脚本连接服务器
使用 SCP/SFTP 安全传输文件
内网端口转发、跳板机方案
✅ 账号密码登录
方式:传统方式,输入用户名和密码进行验证
优点:
简单易用,上手快
不依赖本地私钥
缺点:
安全性低,容易被爆破
不适合自动化任务
多人共用账号时难以追踪
那么下面正式开始教程:
一,生成密钥对
方法还挺多的,比如前面提到的bitwarden中直接生成密钥,创建一个文本文件,将公钥内容复制到里面就可以了。
比如我使用的远程工具MobaXterm也有生成密钥对的功能。
本文则是使用Win系统自带的CMD/PowerShell来生成。
打开软件 输入
cd .ssh
ssh-keygen
如上图 不指定的话,直接回车就行:
Enter file in which to save the key
:密钥存放地址,默认为当前用户目录下的.ssh文件夹下。Enter passphrase
:保护私钥的密码,一般留空,直接回车。Enter same passphrase again
:确认私钥密码
如果需要指定格式,名称,长度, 则可以输入下面的:
ssh-keygen -t rsa -f openwrt -b 2048 -v "youremail@domain.com"
openwrt:替换成你想要文件的名字。
"youremail@domain.com" 改成你自己的邮箱,或者干脆去掉也可以

进入用户名文件夹即可看到我们生成的密钥 比如路径为 C:\Users\用户名\.ssh
如果是使用简化的ssh-keygen命令生成的密钥对,则默认的文件名为id_rsa和id_rsa.pub
id_rsa
:生成的私钥,保留在电脑即可。id_rsa.pub
:生成的公钥,打开后,复制内容,后文部署到服务器上。
右键使用记事本打开id_rsa.pub,内容复制下来。
二,Ubuntu/Debian服务端部署公钥
如果服务器在阿里云/腾讯云上的 在控制台是可以一键创建部署的
本文讲的是通用方法,使用远程工具登陆linux/OpenWrt来部署
先在本地debian/ubuntu虚拟机上部署公钥.
① 使用SSH工具登陆debian/Ubuntu:
因为以前开启的密码登陆,所以先用软件通过密码登陆debian/Ubuntu
进入.ssh
文件夹内(如果没有就使用mkdir命令创建),并编辑authorized_keys
文件:
cd .ssh
vim authorized_keys
把前面复制的内容粘贴进去 ,:wq
保存并退出即可。
到此,SSH密钥登录的服务器端,配置完成。接下来,我们就可以使用客户端连接了。
个人使用的MobaXterm里面把使用私钥勾上,并选择上私钥 id_rsa 文件。
测试一切OK!
② 关闭密码登陆
既然测试密钥登陆成功了,那么肯定要关闭密码登陆,否则白折腾了。
vi /etc/ssh/sshd_config
找到: PasswordAuthentication yes
这一行
取消前边的 # 注释,改为
PasswordAuthentication no
:wq
保存退出

但是,还没好!!!
这里有个大坑,
以前一直以为修改完重启下SSH服务就好了,后来偶然试了一下密码,竟然还能登陆!
原来/etc/ssh/sshd_config.d/路径下有个50-cloud-init.conf文件。
把这个文件里面的 PasswordAuthentication yes
也改成PasswordAuthentication no
最后再重启 ssh 服务
service ssh restart
重新使用登陆,密码已经连接不上了
完成!!!
三,OpenWrt/iStoreOS使用密钥登陆
根据前面第一步的方法,重新生成一个密钥对。把生成的.pub公钥文件重命名为authorized_keys 主要不要有后缀。
① 上传公钥文件
openwrt使用dropbear来管理SSH登录的,所以和上面的linux路径不同。
先使用密码登陆OpenWrt/iStoreOS的SSH,把authorized_keys文件保存到/etc/dropbear/目录并设置权限。
chmod 700 /etc/dropbear
chmod 600 /etc/dropbear/authorized_keys
② 禁用密码登陆
为了进一步增强安全性,你可以在软路由上禁用密码登录,只允许密钥登录。编辑软路由的SSH配置文件
vim /etc/config/dropbear
找到以下行并进行修改:
option PasswordAuth 'no'
然后重启SSH服务:
/etc/init.d/dropbear restart
关闭密码登录不会影响OpenWrt/iStoreOS的网页端登录,所以大家务必不要在公网暴露网页端登录端口(一般是路由器的80/443端口)。
至此修改完毕,本地ubuntu虚拟机和软路由都已经修改完毕了,一定妥善保存存在本地的私钥,ubuntu虚拟机的私钥丢了,可以在绿联虚拟机后台VNC连接修改回密码登陆,而路由器的私钥万一丢失就很麻烦了。
至于实体机的fnOS和绿联为什么不改成密钥登陆?
因为这2台设备平时根本不打开SSH端口啊。
当然想改也可以,这2个系统都是基于debian的,所以方法和上面的一样。
评论区