玄子Share-远程访问及控制
SSH 远程管理
应用服务常用的网络架构
-
Web端应用服务:C/S
- 服务器端 (Server)和客户端(Client)
-
APP端应用服务:B/S
- 服务器端 (Server)和浏览器(Browser)
应用服务主配置文件后缀名
- .conf
- .cnf
- .xm
- _config
- *.ini
配置 OpenSSH 服务端
- SSH(Secure Shell)协议
- 是一种安全通道协议
- 对通信数据进行了加密处理,用于远程管理
- OpenSSH
- 服务名称:sshd
- 服务端主程序:/usr/sbin/sshd
- 服务端配置文件:/etc/ssh/sshd_config
服务监听选项
端口号、协议版本、监听IP地址、禁用反向解析
[root@localhost ~]# vi /etc/ssh/sshd_config
……
Port 22
ListenAddress 172.16.16.22
Protocol 2
UseDNS no
用户登录控制
禁用root用户、空密码用户、限制登录验证时间、重试次数、AllowUsers、DenyUsers
[root@localhost ~]# vi /etc/ssh/sshd_config
LoginGraceTime 2m
PermitRootLogin no
MaxAuthTries 6
PermitEmptyPasswords no
……
AllowUsers jerry admin@61.23.24.25
# AllowUsers不要与DenyUsers同时用
登录验证方式
- 密码验证:核对用户名、密码是否匹配
- 密钥对验证:核对客户的私钥、服务端公钥是否匹配
[root@localhost ~]# vi /etc/ssh/sshd_config
……
PasswordAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
# 启用密码验证、密钥对验证、指定公钥库位置
SSH 客户端登录
ssh 命令:远程安全登录
ssh user@host
# 端口选项:-p 22
ssh -p 22 root@192.168.254.12
scp 命令:远程安全复制
scp user@host:file1 file2
# 下载文件到客户端
scp file1 user@host:file2
# 上传文件到服务器
scp root@192.168.254.12:/etc/passwd /opt/user.txt
scp /opt/user.txt root@192.168.254.12:/home/test.txt
sftp 命令:安全FTP上下载
sftp user@host
sftp root@192.168.254.12
get a.txt
# 下载文件,默认下载到登录时,所在目录
put b.txt
# 上传文件,默认上传到当前,所在目录
lcd /opt
# 切换客户机目录
SSH 密钥对验证
公钥与私钥的关系
- 公钥与私钥是成双成对出现或生产的
- 可以公开的秘钥称为“公钥”,需要自己妥善保管不公开的秘钥称为“私钥”
- 信息机密领域:通过公钥加密,私钥解密来实现的;
- 数字签名:通过私钥加密。公钥解密来实现的;
- 无法通过公钥推算出私钥,也无法通过私钥推算出公钥
在客户机中创建密钥对
ssh-keygen 命令
可用的加密算法:RSA、ECDSA或DSA
[zhangsan@xuanzi ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/zhangsan/.ssh/id_rsa):
Created directory '/home/zhangsan/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
# 设置密钥短语
Your identification has been saved in /home/zhangsan/.ssh/id_rsa.
# 私钥文件位置
Your public key has been saved in /home/zhangsan/.ssh/id_rsa.pub.
# 公钥文件位置
The key fingerprint is:
SHA256:wEuxHgwhjyNoUtT3Ynr9lXIHZF94PdC7OiROagDD+Fg zhangsan@xuanzi
The key's randomart image is:
+---[RSA 2048]----+
| .+.o.. .o..|
|.. +.+.o o .o+|
|+.o +.B. o . oo|
|o. o Eo+. . .. |
| +o=oS o .|
| ...... .o+... |
| . ..++o.. |
| o.. o |
| . . |
+----[SHA256]-----+
将公钥文件上传至服务器
任何方式均可(FTP、Email、SCP、HTTP……)
[zhangsan@xuanzi ~]$ scp ~/.ssh/id_ecdsa.pub root@172.16.16.22:/tmp
在服务器中导入公钥文本
-
将公钥文本添加至目标用户的公钥库
-
默认公钥库位置:~/.ssh/authorized_keys
[root@localhost ~]# mkdir /home/lisi/.ssh/
[root@localhost ~]# cat /tmp/id_ecdsa.pub >> /home/lisi/.ssh/authorized_keys
[root@localhost ~]# tail -1 /home/lisi/.ssh/authorized_keys
客户端使用密钥对验证登录
- 验证用户:服务端的用户 zhangsan
- 验证密码:客户端的用户 zhangsan 的私钥短语
[zhangsan@localhost ~]$ ssh zhangsan@172.16.16.22
另外一种方法
验证密码后,会将公钥自动添加到目标主机user宿主目录下的.ssh/authorized_keys文件结尾
ssh-copy-id -i 公钥文件 user@host
[zhangsan@xuanzi ~]$ ssh-copy-id -i /home/zhangsan/.ssh/id_rsa.pub zhangsan@192.168.254.12
TCP Wrappers 概述
-
保护机制的实现方式
-
通过tcpd程序对其他服务程序进行包装
-
由其他服务程序调用libwrap.so.*链接库
-
-
访问控制策略的配置文件
-
/etc/hosts.allow
-
/etc/hosts.deny
-
设置访问控制策略
- 策略格式:服务程序列表:客户端地址列表
- 服务程序列表
- 多个服务以逗号分隔,ALL 表示所有服务
- 客户端地址列表
- 多个地址以逗号分隔,ALL表示所有地址
- 允许使用通配符 ? 和 *
- 网段地址,如 192.168.4. 或者 192.168.4.0/255.255.255.0
- 区域地址,如 .benet.com
策略的应用顺序
- 检查hosts.allow,找到匹配则允许访问
- 再检查hosts.deny,找到则拒绝访问
- 若两个文件中均无匹配策略,则默认允许访问
策略应用示例
- 仅允许从以下地址访问sshd服务
- 主机61.63.65.67
- 网段192.168.2.0/24
- 禁止其他所有地址访问受保护的服务
[root@localhost ~]# vi /etc/hosts.allow
sshd:61.63.65.67,192.168.2.*
[root@localhost ~]# vi /etc/hosts.deny
sshd:ALL
SSH 远程服务配置
服务端配置
[root@xuanzi ~]# rpm -q openssh-server
openssh-server-7.4p1-16.el7.x86_64
# CentOS 自带 openssh 服务
vi /etc/ssh/sshd_config
# 修改服务端配置文件,分别修改一下配置项
Port 22
# SSH服务器监听的端口号,默认是22端口。
ListenAddress 172.16.16.22
# SSH服务器绑定的IP地址,只监听这个地址上的连接请求。
Protocol 2
# SSH服务器使用的协议版本,这里指定为版本2。
UseDNS no
# 禁用DNS反向解析,提高连接速度,尤其是在DNS解析存在问题时。
LoginGraceTime 2m
# 用户登录的超时时间,这里是2分钟。
PermitRootLogin no
# 禁止root用户通过SSH直接登录。
MaxAuthTries 6
# 认证尝试的最大次数,超过后将断开连接,这里是6次。
PermitEmptyPasswords no
# 禁止空密码用户登录。
PasswordAuthentication yes
# 允许使用密码进行认证。
PubkeyAuthentication yes
# 允许使用公钥进行认证。
AuthorizedKeysFile .ssh/authorized_keys
# 存放用户公钥的文件路径,这里指定为当前用户家目录下的.ssh/authorized_keys文件。
[root@xuanzi ~]# systemctl reload sshd
# 重新加载配置文件
客户端登录
ssh -p 22 root@192.168.254.12
# 客户端登录 ssh user@host
密钥登录
[root@xuanzi ~]# useradd zhangsan
[root@xuanzi ~]# passwd zhangsan
# 先在服务端创建新用户 zhangsan 用于远程登录
[root@xuanzi ~]# useradd zhangsan
[root@xuanzi ~]# passwd zhangsan
[root@xuanzi ~]# su - zhangsan
# 然后在客户端,创建新用户用于生成密钥
[zhangsan@xuanzi ~]$ ssh-keygen -t rsa
# 生成密钥
[zhangsan@xuanzi ~]$ ssh-copy-id -i /home/zhangsan/.ssh/id_rsa.pub zhangsan@192.168.254.12
# 上传公钥:验证密码后,将公钥自动添加到目标主机 user 宿主目录下的 .ssh/authorized_key s文件结尾
[zhangsan@xuanzi ~]$ ssh zhangsan@192.168.254.12
# 上传密钥后再次登录即可,免密登录
设置登录策略
[root@localhost ~]# vi /etc/hosts.allow
# sshd:192.168.254.12,192.168.2.*
[root@localhost ~]# vi /etc/hosts.deny
# sshd:ALL
玄子Share-远程访问及控制 2024.04.09