一、SSH远程管理
1.1 SSH定义
- SSH(Secure Shell) 是一种安全通道协议,主要用来实现字符界面的远程登录、远程 复制等功能;
- SSH 协议 对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令;
- SSH 为建立在应用层和传输层基础上的安全协议。对数据进行压缩,加快传输速度。
1.2 SSH优点
加密: 可以防止信息泄漏
压缩: 可以提高传输速度
1.3 SSH开启、端口号、配置文件
客户端:
Linux Client: ssh, scp, sftp,slogin
Windows Client: xshell, MobaXterm,putty, securecrt, sshsecureshellclient
服务端::
OpenSSH 是实现SSH协议的开源软件项目,适用于各种UNIX、 Linux 操作系统
Centos 7系统默认已安装openssh相关软件包,并将sshd 服务添加为开机自启动(systemctl start sshd 启动服务)
SSH服务的开启:
systemctl start sshd 启动服务
SSH服务的端口号:
sshd服务使用的端口默认号为22
1023以上就是高位端口
SSH服务的配置文件
sshd服务的默认配置文件是/etc/ssh/sshd_config
ssh_config(客户端) 和sshd_config (服务端)都是ssh服务器的配置文件。
服务名称:sshd
服务端主程序:/usr/sbin/sshd
服务端配置文件:/etc/ssh/sshd_config
客户端配置文件:/etc/ssh/ssh_config
二、配置OpenSSH服务端
2.1 公钥传输原理
- 客户端发起链接请求
- 服务端返回自己的公钥,以及一个会话ID(这一步客户端得到服务端公钥)
- 客户端生成密钥对
- 客户端用自己的公钥异或会话ID,计算出一个值Res,并用服务端的公钥加密
- 客户端发送加密后的值到服务端,服务端用私钥解密,得到Res
- 服务端用解密后的值Res异或会话ID,计算出客户端的公钥(这一步服务端得到客户端公钥)
- 最终:双方各自持有三个秘钥,分别为自己的一对公、私钥,以及对方的公钥,之后的所有通讯都会被加密
2.2 配置文件中的参数
[root@Kiro .ssh]# vim /etc/ssh/sshd_config ##进入服务端配置文件
MaxAuthTries 6 ##输入密码次数限制 6代表输错六次就退出
PasswordAuthentication yes ##打开密钥
PubkeyAuthentication yes ##开启密码认证
2.3 登录
------方法一-------
ssh [远程主机用户名]@[远程服务器主机名或IP地址] -p port
当在 Linux 主机上远程连接另一台 Linux 主机时,如当前所登录的用户是 root 的话,当连接
另一台主机时也是用 root 用户登录时,可以直接使用 ssh IP,端口默认即可,如果端口
不是默认的情况下,需要使用-p 指定端口
------方法二------
ssh -l [远程主机用户名] [远程服务器主机名或IP 地址] -p port
-l : 指定登录名称。
-p:指定登录端口(当服务端的端口非默认时,需要使用-p 指定端口进行登录)
- 方法一:[root@Kiro ~]# ssh root@192.168.61.110
- 方法二:[root@pxw /]# ssh -l root 192.168.61.100
2.4 sshd服务支持登录验证方式
密码验证:
以服务器中本地系统用户的登录名称、密码进行验证。这种方式使用最为简便,但从客户机角度来看,正在连接的服务器有可能被假冒,从服务器角度来看,当遭遇密码暴力破解攻击时防御能力比较弱。
密钥对验证:
要求提供相匹配的密钥信息才能通过验证,通常先在客户机中创建一对密钥文件(公钥和私钥),然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用公钥、私钥进行加密/解密关联验证,增强了远程管理的安全性。
- 公钥和私钥是成对生成的,这两个密钥互不相同,可以互相加密和解密;
- 不能根据一个密码来推算出另一个密钥;
- 公钥对外公开,私钥只有私钥的持有人才知道。
2.4 密钥的配置
做了密钥设置之后,服务端远程控制客户端就需要密钥了:
------1.生成密钥文件------
[root@Kiro ~]# ssh-keygen -t ecdsa
##需要自定义设置密码,如果不想设置密码就一直回车
-----2.将公钥文件导入对方的用户-----
[root@Kiro ~]# cd /root/.ssh
[root@Kiro .ssh]# ls
id_ecdsa id_ecdsa.pub known_hosts
:
[root@Kiro .ssh]# ssh-copy-id -i /root/.ssh/id_ecdsa.pub root@192.168.61.110
## 这一步需要输入对方的密码
------3.再次远程登录客户机------
[root@Kiro .ssh]# ssh root@192.168.61.110
Enter passphrase for key '/root/.ssh/id_ecdsa': ##这个时候就需要输入密钥而不是密码了
- 1.生成密钥文件
- 2.将公钥文件导入对方用户
- 3.登录客户机
三、 使用SSH客户端程序
3.1 命令程序ssh、scp、sftp
ssh远程登录
[root@pxw /]# ssh kiro@192.168.61.100
kiro@192.168.61.100's password:
Last login: Fri Apr 15 16:43:30 2022 from 192.168.61.110
##第一次登陆时需要接收来自服务端的密钥 博主的客户端不是第一次登陆了所以不需要
scp远程复制
通过scp命令可以利用SSH安全连接与远程主机相互复制文件;接下来我为大家做两个演示,分别是把远程主机的文件复制给本机,还有把本机的文件复制给远程主机:
--------远程主机 >>> 本机-------
[root@Kiro /]# scp root@192.168.61.110:/etc/passwd /opt/kiro
##将远程主机/etc/passwd 下的文件内容复制到本机/opt/kiro 文件下
Enter passphrase for key '/root/.ssh/id_ecdsa': ##需要输入密钥
passwd 100% 2349 1.0MB/s 00:00
##复制的文件名以及进度条
---------本机 >>> 远程主机-------
[root@Kiro /]# scp /etc/passwd root@192.168.61.110:/opt/pxw
##将本机的/etc/passwd 文件内容复制到远程主机/ opt/pxw文件之下
Enter passphrase for key '/root/.ssh/id_ecdsa': ##需要输入密钥
passwd 100% 2399 614.2KB/s 00:00
## 复制文件名 和进度条
---------复制目录:scp -r---------
- 远程主机 >> 本机:
- 本机 >> 远程主机
sftp 安全 FTP
通过sftp命令可以利用 SSH安全连接与远程主机上传、下载文件,采用了与FTP类似的登陆过程和交互式环境,便于目录资源管理接下来博主为大家演示一下登录、浏览、上传文件等过程:
[root@Kiro /]# sftp root@192.168.61.110 ##登录
Enter passphrase for key '/root/.ssh/id_ecdsa':
##因为设置了密钥 ,这里输入密码而不是密钥
Connected to 192.168.61.110.
sftp> ls ##查看一下当前目录下有什么
anaconda-ks.cfg initial-setup-ks.cfg
sftp> put /boot/config-3.10.0-957.el7.x86_64 ##上传config安装包
Uploading /boot/config-3.10.0-957.el7.x86_64 to /root/config-3.10.0-957.el7.x86_64
/boot/config-3.10.0-957.el7.x86_64 100% 148KB 1.5MB/s 00:00
sftp> ls ##再次查看 config安装包上传成功
anaconda-ks.cfg config-3.10.0-957.el7.x86_64
initial-setup-ks.cfg
sftp> bye ##退出登录
[root@Kiro /]#
四、TCP Wrappers 访问控制
4.1 策略配置格式
策略的配置格式:
<服务程序列表>:<客户机地址列表>
服务程序列表:
- ALL: 代表所有服务
- 单个服务程序: 如:vsftpd
- 多个服务程序组成的列表: vsftpd , sshd
客户机地址列表:
- ALL: 代表所有客户机
- LOCAL: 代表本机地址
- 单个IP地址: 如:192.168.61.100
- 网络段地址: 如: 195.168.61.0/24
- 以 “.” 开始的域名: 如: .kiro.cn 匹配 kiro.cn 域中的所有主机
- 以 “,” 结束的网络地址: 如: 192.168.61. 匹配 整个 192.168.61.0/24网段
- 嵌入通配符 “ * ” , “?”: 前者代表任意长度字符,后者仅代表一个字符;不可以与 “.” 开头或者结束的模式混用
- 多个客户机地址组成的列表: 如: 192.168.61., 92.168.100., .kiro.cn
4.2 配置实例
[root@Kiro ]# vim /etc/hosts.allow ##允许访问的列表
[root@Kiro ]# vim /etc/hosts.deny ##禁止访问的列表
测试结果:
IP地址为:192.168.61.110的主机访问192.168.61.100 失败
五、安全调优
2.1 LoginGraceTime 2m
●grace意思是系统给与多少秒来进行登录。(默认2分钟,0表示无限制)
●当使用者连上 SSH server 之后,会出现输入密码的画面,在该画面中。
●在多久时间内没有成功连上sSHserver 就强迫断线!若无单位则默认时间为秒。可以根据实际情况来修改实际
2.2 PermitRootLogin yes实验
是否允许 root 登入,默认是允许的,但是建议设定成no,真实的生产环境服务器,是不允许root账号直接登陆的,仅允许普通用户登录,需要用到 root 用户再切换到root 用户。
例:
创建用户zhangsan、 lisi
查询组
grep “wheel” letc/group
gpasswd -a zhangsan wheel #zhangsan用户已加入 wheel 组
开启pam模块
2.3 PasswordAuthentication yes
密码验证当然是需要的!所以这里写yes,也可以设置为no,在真实的生产服务器上,根据不同安全级别要求,有的是设置不需要密码登陆的,通过认证的秘钥来登陆。
2.4 PermitEmptyPasswords no
是否允许空密码的用户登录,默认为no,不允许空密码登录
2.5 PrintLastLog yes
显示上次登入的信息!默认为yes
2.6 MaxAuthTries 6
指定每个连接最大允许的认证次数。默认值是6 。
如果失败认证的次数超过这个数值的一半,连接将被强制断开,且会生成额外的失败日志消息默认3次
2.7、扩展认证
阿里云
扩展命令参数
ssh -o ConnectTimeout=3 -o Connectionattempts=5 -o
Passwordauthentication=no
-o strictHostKeychecking=no $ip ”
command "
#connectTimeout=3 #连接超时时间,3秒
#ConnectionAttempts=5 #连接失败后重试次数,5次
#PasswordAuthentication=no #不使用密码认证,没有互信直接退出
#StrictHostKeychecking=no #自动信任主机并添加到known_hosts文件
例:
ssh -o strictHostKeyChecking=no root@192.168.10.0
对未经过安全认证的RPM包进行安全检查
Linux用户方面的加固
设定密码策略
对用户密码强度的设定
对用户的登录次数进行限制禁止ROOT用户远程登录
设置历史命令保存条数和账户超时时间设置只有指定用户组才能使用su命令切换到root用
对Linux账户进行管理
对重要的文件进行锁定,即使ROOT用户也无法删除
建立日志服务器曰