Linux安全:SSH原理
SSH的使用是很简单的,先说使用,从实践中理解。我用的比较多的是免密登录,所以放在前面了。
免密登录操作
流程如下:
本地生成密钥对
发送本地的公钥到服务器
添加自己的私钥
生成密钥对
可以通过使用 ssh-keygen
命令来生成,我们可以先使用 man 命令或者是 help 命令查看具体需要哪些参数以及具体信息。
通过执行命令 ssh-keygen -t rsa 来生成我们需要的密钥。默认是在~/.ssh/
目录下
1 | ssh-keygen -t rsa |

我们看到有几个文件,下面分别解释下每个文件是干什么用的。
id_rsa: 生成的私钥文件,本机的私钥,不能泄露,很重要。
id_rsa.pub: 生成的公钥文件,本机的公钥。
known_hosts: 已知的主机公钥清单,它存储了用户曾经连接过的主机的公钥,用于验证服务器的身份
known_hosts.old:旧的known_hosts
authorized_keys: 存放远程免密登录的公钥,主要通过这个文件记录多台机器的公钥。这里没明白没关系,下面马上会介绍。我的机器上没有,因为我的win10不需要别人免密登录。
公钥复制
公钥需要复制到authorized_keys,这样这台服务器会在这个文件中查找,如果ssh客户端的公钥在这里,那么就会免密登录。
这里介绍最常用的三种方式,一是通过 ssh-copy-id 命令,二是通过 scp 命令,三是手工复制。
使用ssh-copy-id复制
方式一,通过 ssh-copy-id 命令设置。-i是指定公钥的路径,-p指定端口。最后一个参数是我们要免密钥登录的服务器 ip 地址。
1 | ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.1.100 |
如果你的端口改变了,那就需要指定端口
1 | ssh-copy-id -p 48822 root@192.168.1.100 |
scp复制公钥
方式二,通过 scp 命令直接将该文件远程复制过去,使用这种方式需要注意,如果你之前已经配置了其它服务器上的密钥,这是使用这种方法,就会覆盖掉你原来的密钥,这时候是不建议使用这种方式的,如果你是先将该文件复制到服务器上的一个目录下,然后在使用追加的方式,将密钥追加到 authorized_keys 也是完全 OK 的。如果你只有两台服务器也是可以直接复制到文件。
1 | scp -P 48822 ~/.ssh/id_rsa.pub root@192.168.1.100:~/.ssh/authorized_keys |
手动复制公钥
方式三,通过手工复制。将本地 id_rsa.pub 文件的内容拷贝至远程服务器的 ~/.ssh/authorized_keys 文件中也完全可以的。先使用 cat 命令查看当前的公钥,然后复制,在到目标服务器上去粘贴。
添加私钥
以上操作是默认你使用win系统操作,如果你使用cmd连接,那么不必添加私钥信息。如果你使用ssh工具,需要添加私钥信息。
如windterm
(身份验证被拒绝是因为我把authorized_keys 的公钥删除了,否则免密登录太快了,根本不现实这个界面,我这里是为了显示这个界面)

点击继续,即可免密登录。
如果你是Linux操作,那么这一步不必执行。
SSH原理
密码认证
简要概括如下:
ssh登录时,为了最大程度保证账户、密码安全,使用非对称加密;
登录后,客户端、服务端之间的数据通信,采用随机口令,进行对称加密,因为速度快;
想象一下,客户端是一位想要进入一座高安全大楼的访客,而服务器则是大楼的保安。以下是这个过程的通俗解释和相应的流程图代码:
- 访客(SSH客户端)敲门请求进入(发起登录请求)。
- 保安(SSH服务端)通过窗口递出一张他的名片(公钥)。
- 如果是访客第一次来访,保安会让访客确认他的身份(指纹信息确认)。
1 | daokun@daokun ~/Desktop |
- 访客使用这张名片(公钥)将自己的密码变成一个谜(加密密码)。
- 保安用自己的钥匙(私钥)解开谜团(解密密码)。
- 保安核对访客的密码是否在访客名单上(对比/etc/shadow文件)。
- 如果一切顺利,保安会给访客一个访问卡(随机会话口令),以后访客就可以用这个卡自由进出了。
1 | sequenceDiagram |
基于密钥对的认证
基于密钥对认证,也就是所谓的免密码登录,理解免密登录原理

SSH安装
SSH服务配置
1、搭建所有服务的套路
- 关闭防火墙和selinux(实验环境都先关闭掉)
- 配置yum源(公网源或者本地源)
- 软件安装和检查
- 了解并修改配置文件
- 启动服务检查运行状态并设置开机自启动
2、搭建SSH服务
(一)关闭防火墙和selinux
1 | # 关闭firewalld防火墙 |
(二)配置yum源
注意:一般情况下使用网络源即可。
如果==没有网络==的情况下,才需要配置本地源
1 | # mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup |
(三)yum安装
1 | yum install openssh-server |
(四)服务管理
1 | # 重启服务 |
创建用户和组
用户和用户组创建
①添加开发组
1 | groupadd devgroup |
②添加用户到用户组中
1 | [root@jumpserver ~]# groupadd devgroup |
使用非交互式设置密码
1 | [root@jumpserver ~]# echo 123456 |passwd --stdin devyu |
为开发人员创建数据目录并且设置相应的权限
1 | [root@jumpserver ~]# mkdir -p /devyu/data/ |
参考资料