SSH服务学习
一:为什么要学习SSH服务
在我们日常的工作中直接面对服务器开始工作的可能是非常低的。除非你工作在机房。特别是现在云服务大行其道的时候,我们直接面对服务器设备的可能就更低了,在我们的实际工作中,为了服务器的安全我们通常都是远程登陆做管理。如下图所示
在我们远程链接服务器做管理的时候我们需要不断的交互数据。当前在互联网可以进行远程管理的有telnet和ssh两种。telnet是明文用来管理的,即在运维人员和服务器之间的通信是不做加密处理的只要在数据的交互过程中出现“中间人”那么对于中间人来说,我们所有的信息都是公开的,如下图
比如:我们的服务器是负责公司app中财务周转业务的,那么公司的小钱钱就不知道去哪里了。所以我们与服务器之间的通信需要可靠且安全才行。
根据上面的实际需求,所以我们需要学习SSH。因为SSH是建立在应用层的远程安全管理协议。可以说SSH专为我们这种工作场景而生。
SSH是目前市场上比较可靠的传输协议,专为远程登陆会话和其他网络服务提供安全可靠的通信,利用ssh协议可以有效的防止远程管理过程中的逆袭泄露问题。
二、学习目标
1)ssh的通信原理
2)ssh的应用
2.1 SSH的通信原理
2.1.1为什么要学习原理
我们在实际的工作中会碰到各种个样的问题,只有我们知道了原理,我们才能解决问题,知道了原理,我们才会有解决问题的思路。比如:SSH无法登陆服务器了,我们需要怎么处理呢?
2.1.2 SSH登陆服务器的方式
1) 用户名和密码登陆
我喜欢用图来做说明,这样可以辅助自己记忆
第一步:客户机向服务器发送连接请求。
第二步:服务器接收到客户机发送的请求后,在服务器端,创建要发送给客户端的公钥和私钥「公钥我们可以理解为锁头,私钥理解为钥匙」每次客户机把数据向服务器发送时都要在数据包上加一把锁头,然后服务器收到后会拿私钥解开锁头,拿出里面的数据。理解图如下
第三步,客户机接收到服务器发来的公钥,会在客户端提示,核实公钥,如果使用xshell的话会出现下面的提示
点击接受之后就是把服务器发过来的公钥做了保留。理解图如下
保存公钥后,会把要登陆的用户名和密码通过服务器的公钥做数据加密,然后把加密后的文件发送给服务器。
第四步:服务器接收后先检查是不是自己的公钥,是自己的公钥会使用私钥打开,取出里面的用户名和密码,分别拿用户名比对/etc/passwd文件和密码对比/etc/showdaw,比对,成功则建立连接失败则发送提示信息并断开连接
最后一步:验证成功,客户机就可以和服务器连接成功了
2)密钥对登陆
密钥对登陆使用的是:对称密钥
理解图如下
2.2 SSH的应用
2.2.1 用户名密码登陆
连接服务器
格式:ssh 登陆服务器的用户名@服务器的地址:提供ssh服务的端口号
ssh在服务器中的服务名称为:sshd,默认端口为22,如果是默认端口则登陆的时候可以省略端口号
实例如下
连接服务器
服务器发送公钥到客户端,提示是否接收
使用xshell测试,到此弹出如下内容
输入:yes或点击接受,接收服务器端的公钥。
最后输入密码:如下图
完成登陆。
2.2.2 密钥对登陆
1)准备阶段,我们要把客户机生成的客户机公钥和私钥先生成出来,然后在把客户端的公钥上传到服务器端。
服务器端名称:test-linuxStudy
IP地址:192.168.1.100
服务端口:22 默认端口
客户机端名称:studyLinux
IP地址:192.168.1.105
服务端口:22 默认端口
(1):客户机生成客户机公钥和私钥
语法:ssh-keygen -t rsa -b 2048
说明:生成加密key,使用的加密模式【-t rsa】rsa 生成的加密文件是2048位,默认是1024,但是目前1024长度的密钥已经可以使用计算机暴力破解了,所以这里使用2048的
是否更改密钥生成后要保存的文件位置,通常直接按回车就可以,文件会保存在/root/.ssh/id_rsa
按回车继续
是否对产生的公钥进行密码加密。为了安全通常会做加密设置,这里直接输入密码,输入完成后按回车
在确认一次密码,重新输入上次输入的密码就可以了
密钥生成完成,如下图
看一下生成的文件
其中:id_rsa为客户端私钥,id_rsa.pub为客户端公钥。
下面要上传客户端的公钥到服务器的/root/.ssh/authorized_keys文件中,查看服务器.ssh文件夹中的内容
服务器端.ssh文件夹下没有任何文件
(2)上传密钥到服务器
格式:ssh-copy-id root@192.168.1.100
输入以root用户登陆到192.168.1.100服务器的登陆密码
上传成功。服务器端返回信息,已经把密钥放在authorized_keys文件中了。
我们检查一下服务器端
服务器test-linuxStudy已经保存了客户端的公钥到文件authorized_keys
打开服务器端authorized_keys文件查看它的内容
使用命令是:vim /root/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAyW3jfScYdIwjXAsozls2FD9PtIZneOeSsW2UJ4I/meVeFgeqbn7W7BqDIliUlq1/ABBEqhJjFglhZ4JnLRHZQUwpIBbu/rkqcOnhCIc2mRz4P8+TRddJErd1a2K4vWN6gRwvv4s362krBOX29KMnm9AWOrsOA2uZ6zE/AeSQt35EzaxjNvgTwWb9yMU4T73ekKqpJBvUDMcI9Aie8aoB+AOZglVX2/swmfRyHNxWqKPZ5U0Dxl0fHlaBL8iAH8lYZM/h83Y2EGvMjEi3NaxReve8vnz2vKhHoJO4kRK3+Cdsuns6jyJgFjWRGY6FAYvuItWLmJ5Js0BhOG82AnlQ== root@studyLinux
使用命令查看客户机:/root/.ssh/id_rsa.pub中的文件内容。如下
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAyW3jfScYdIwjXAsozls2FD9PtIZneOeSsW2UJ4I/meVeFgeqbn7W7BqDIliUlq1/ABBEqhJjFglhZ4JnLRHZQUwpIBbu/rkqcOnhCIc2mRz4P8+TRddJErd1a2K4vWN6gRwvv4s362krBOX29iTKMnm9AWOrsOA2uZ6zE/AeSQt35EzaxjNvgTwWb9yMU4T73ekKqpJBvUDMcI9Aie8aoB+AOZglVX2/swmfRyHNxWqKPZ5U0Dxl0fHlaBL8iAH8lYZM/h83Y2EGvMjEi3NaxReve8vnz2vKhHoJO4kRK3+Cdsuns6jyJgFjWRGY6FAYvuItWLmJ5Js0BhOG82AnlQ== root@studyLinux
可以看到两个文件是相同的,则当前的准备阶段完成。
(3)开始使用密钥对登陆
客户端输入登陆命令:ssh 用户名@服务器的ip地址 [-P 端口号(默认端口不用写)]
需要输入密钥的加密密码,按回车后完成登陆
以后都可以这样登陆了。
三 实际工作中的问题
在实际工作中通常为了安全是不会使用22这种知名端口的。都会该成其他不常用的端口。
那么我们怎样更改ssh服务的服务端口
3.1 更改端口配置
ssh的配置文件在服务器中的保存位置是:/etc/ssh/sshd-config
打开文件后更改文件中的#Port 22,把前面的#去掉,然后在创建一个新的Port 22222,如下图
注意:先不要删除22端口,否则一旦出问题,服务器就登陆不上去了,要命的。
然后重启服务:service sshd restart
这里是学习环境所以不考虑iptables和selinux的问题,后面学习iptables和selinux时回说明。
重启完成后就可以使用命令:ssh -p 22222 root@192.168.1.100
3.2 更改限制root直接登陆
为了服务器的安全,通常在生产环境下是不允许直接使用root进行登陆的。每年都有因为使用root权限删除重要数据造成服务器崩溃的数据丢失的,等等问题。
这里我们配置的依旧是/etc/ssh/sshd_config文件
把PermitRootLogin 更改为no,就禁止了root的登陆
测试