前言
SSH (Secure Shell) 是一种安全通道协议,主要用来实现字符界面的远程登录、远程复制等功能。SSH协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令,SSH为建立在应用层和传输层基础上的安全协议。(不安全)
一、SSH数据传输原理
SSH客户端与服务端是通过网络来进行数据文件传输的,数据传输是加密的,可以防止信息泄露,数据传输是压缩的,可以提高传输速度。(看看就行)
SSH客户端(远程连接工具): Putty、Xshell、CRT、MobaXterm、 FinalShell
SSH服务端(接受远程连接机器): OpenSSH (c/s架构)
sshd服务默认使用的是TCP的22端口
sshd服务的默认配置文件是/etc/ssh/sshd_ config
ssh_ config和sshd_ config(服务端比较多) 都是ssh服务器的配置文件,二者区别在于前者是针对客户端的配置文件,后者则是针对服务端的配置文件。
(我们修改的话修改的是服务端sshd_config)
(配置文件中带有“d”的一般都是服务端配置文件,d全程daemon,守护进程)
二.配置OpenSSH服务端
1.SSH服务及配置文件
在centos7中,OPENSSH服务器由openssh、openssh-server等软件包提供(默认已安装),并已将sshd添加为标准的系统服务。
sshd服务的配置文件默认位于/etc/ssh/sshd_config
查看配置文件
[root@yzq ssh]# rpm -qc openssh-server
/etc/pam.d/sshd
/etc/ssh/sshd_config
/etc/sysconfig/sshd
2.服务监听选项
sshd服务使用的端口默认为TCP22端口,可修改,并且可以指定监听服务的IP地址,SSH协议的版本V2比V1的安全性要更好,禁用DNS反向解析可以提高服务器的响应速度
[root@yzq ssh]# vim sshd_config
#Port 22 //监听端口
#ListenAddress 0.0.0.0 //监听地址
#ListenAddress :: //监听地址V6
#UseDNS yes //启用DNS反向解析
3.用户登录控制
ssh服务支持两种验证方式:
1.密码验证:对服务器中本地系统用户的登录名称、密码进行验证。简便、但可能会被暴力破解
2.密钥对验证:要求提供相匹配的密钥信息才能通过验证。通常先在客户端中创建一对密钥文件(公钥、私钥),然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用公钥、私钥进行加密/解密关联验证,大大增强了远程管理的安全性。该方式不易被假冒,且可以免交互登录,在Shell 中被广泛使用。
对称密钥和非对称密钥
非对称密钥:RSA,创建出一个公钥,一个私钥,验证时私钥必须和公钥对应匹配才允许登录、交互,否则拒绝
PS:公钥和私钥实际而言就是两个文件
4.密钥对验证
当密码验证和密钥验证都启用时,服务器优先使用密钥对验证。视情况开启
[root@yzq ssh]# vim sshd_config
5.远程登录
一台机器远程登录另一台机器
ssh root@ip地址(本机地址192.168.28.10远程连接192.168.28.200)
[root@yzq ~]# ssh root@192.168.28.200
The authenticity of host '192.168.28.200 (192.168.28.200)' can't be established.
ECDSA key fingerprint is SHA256:H0NvnN/I5R8RP8iK45FJ8w3YBtSmIzPgR6vRTffgu4U.
ECDSA key fingerprint is MD5:57:8d:db:58:e9:cd:b8:e1:dc:0b:0b:2e:e1:40:8a:c0.
Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.28.200' (ECDSA) to the list of known hosts.
root@192.168.28.200's password:
Last failed login: Wed Jul 20 17:08:38 CST 2022 from :0 on :0
There was 1 failed login attempt since the last successful login.
Last login: Wed Jul 20 10:29:39 2022
使用ifconfig查看ip,现在已在192.168.28.200的机器上
[root@yzq ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.28.200 netmask 255.255.255.0 broadcast 192.168.28.255
想要放回原来的主机只需要exit退出叠加环境
[root@yzq ~]# exit
登出
Connection to 192.168.28.200 closed.
[root@yzq ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.28.10 netmask 255.255.255.0 broadcast 192.168.28.2
6.建立密钥对
每次输入密码比较麻烦,也不安全,此时可建立密钥对
ssh-keygen -t rsa 建立非对称密钥对
ssh-keygen 建立密钥对
-t 类型
rsa 非对称
到密钥保存位置
7.推送密钥
ssh-copy-id root@192.168.28.200
密钥复制给哪个服务器
此时192.168.28.10远程登录控制192.168.28.200不需要输入密码
查看192.168.28.200的密钥文件,发现没有密钥存在
此时28.200主机远程登录控制28.10主机仍需要输入密码
说明密钥是单向的,如果需要两台主机相互登录控制可分别配置密钥
8.配置双向密钥
为192.168.28.200创建到192.168.28.10的密钥
[root@yzq .ssh]# ssh root@192.168.28.10
The authenticity of host '192.168.28.10 (192.168.28.10)' can't be established.
ECDSA key fingerprint is SHA256:PmUQJLPtOZJqJDxlsukkT0IA9N91nMCz16cf6wwm8i8.
ECDSA key fingerprint is MD5:80:ba:4c:6f:63:0f:0a:7c:98:4c:84:5b:e1:5d:5e:41.
Are you sure you want to continue connecting (yes/no)? ^C
[root@yzq .ssh]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.28.200 netmask 255.255.255.0 broadcast 192.168.28.255
配置步骤同上,此处不一一展示
配置结果如下