为了安全起见,ssh应该用证书,而不是密码进行登录
以下演示先使用ssh密码登陆linux服务器,再改为证书登录的全过程

1.使用ssh密码登录linux服务器

ssh的软件很多,我这里用的是Tabby Terminal
在这里插入图片描述

2.生成公钥和私钥(在被登录的linux服务器操作)

需要使用root账户操作!!!使用普通账户su root提权
生成公钥和私钥,任何目录下都行

ssh-keygen -t rsa

提示默认生成位置为/root/.ssh/id_rsa,直接回车。(也可以自己改)
在这里插入图片描述

提示输入证书的密码,可以留空,建议输入,如果输入了,则需要再次确认,记住这个证书密码
(证书再加一层密码,这样即使证书丢失,也有第二个保险,有个缓冲时间)
在这里插入图片描述

3.将公钥添加到 authorzied_keys文件中(在被登录的linux服务器操作)

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

4.下载私钥

进入目录

cd /root/.ssh/

目录下的文件如下:
在这里插入图片描述
下载id_rsa这个文件,用ssh自带的功能

注意:如果上述操作是ssh操作的,即使是su root 提权到root账户,可能没有权限打开这个目录(新的linux ssh版本只有证书登录的root才有完整权限!),那么可以可以使用cat命令把密钥打出来,然后复制文本,在windows下可以新建txt文件,文本复制粘贴进去,然后把文件名去掉.txt后缀就行

cat /root/.ssh/id_rsa

5.使用证书登录

建议先用证书登录,成功后再禁止密码登录,以免出错导致要重装系统

在这里插入图片描述

6.配置ssh文件(在被登录的linux服务器操作)

注意:最新的一些linux系统已经默认root必须证书登录,就算使用普通账号提权也无法获取完整的root权限,另外已经没有下面的配置了,但是老一点的系统版本还是有的!所以如果没有下面的配置直接跳过即可

上一步成功登录后可以进行下面的操作。
编辑配置文件

vi /etc/ssh/sshd_config

允许root登录,但只允许证书登录
找到PermitRootLogin 并将值修改为without-password
禁止密码登录(新版ssh无需修改这个)
找到PasswordAuthentication 并将值修改为no

保存后,刷新ssh配置文件

systemctl restart sshd

此时原来密码登录的ssh还能用,但是关闭再打开就不行了,证书登录正常

更多推荐