小阿轩yx-远程访问及控制
SSH远程管理
应用服务常用的网络架构
-
Web端应用服务:C/S
- 服务器端 (Server)和客户端(Client)
-
APP端应用服务:B/S
- 服务器端 (Server)和浏览器(Browser)
应用服务主配置文件后缀名
- .conf
- .cnf
- .xm
- _config
- *.ini
配置 OpenSSH 服务端
阿里云服务器明文规定 setenforce 0 不能开
- setenforce 0:关闭
- setenforce1:开启
- SSH(Secure Shell)协议
- 是一种安全通道协议
- 对通信数据进行了加密处理,用于远程管理
- 安装在内核之外的应用程序
-
是由OpenSSH来实现的
-
port端口:22,port端口修改端口当前连接不会断开,重启之后就会断开连接不上
-
Telnet端口:23
- OpenSSH
- 服务名称:sshd
- 服务端主程序:/usr/sbin/sshd
- 服务端配置文件:/etc/ssh/sshd_config
服务监听选项
端口号、协议版本、监听IP地址、禁用反向解析
[root@localhost ~]# vim /etc/ssh/sshd_config
……
Port 22
ListenAddress 172.16.16.22
Protocol 2
UseDNS no //禁用 DNS 反向解析
……
[root@localhost ~]# systemctl restart sshd
SSH 远程服务配置
服务端配置
[root@localhost ~]# 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@localhost ~]# systemctl reload sshd
# 重新加载配置文件
客户端配置
[root@localhost ~]# ssh -p 22 root@192.168.10.101
# 客户端登录 ssh user@host
密钥登录
[root@localhost ~]# useradd zhangsan
[root@localhost ~]# passwd zhangsan
# 先在服务端创建新用户 zhangsan 用于远程登录
[root@localhost ~]# useradd zhangsan
[root@localhost ~]# passwd zhangsan
[root@localhost ~]# su - zhangsan
# 然后在客户端,创建新用户用于生成密钥
[zhangsan@localhost ~]$ ssh-keygen -t rsa
# 生成密钥
[zhangsan@localhost ~]$ ssh-copy-id -i /home/zhangsan/.ssh/id_rsa.pub zhangsan@192.168.10.101
# 上传公钥:验证密码后,将公钥自动添加到目标主机 user 宿主目录下的 .ssh/authorized_key s文件结尾
[zhangsan@localhost ~]$ ssh zhangsan@192.168.10.101
# 上传密钥后再次登录即可,免密登录
用户登录控制
禁用root用户、空密码用户、限制登录验证时间、重试次数、AllowUsers、DenyUsers
[root@localhost ~]# vim /etc/ssh/sshd_config
LoginGraceTime 2m
PermitRootLogin no
MaxAuthTries 6
PermitEmptyPasswords no
……
AllowUsers jerry admin@61.23.24.25
# AllowUsers不要与DenyUsers同时用
登录验证方式
- 密码验证:核对用户名、密码是否匹配
- 密钥对验证:核对客户的私钥、服务端公钥是否匹配
[root@localhost ~]# vim /etc/ssh/sshd_config
PasswordAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
# 启用密码验证、密钥对验证、指定公钥库位置
…… //省略部分内容
[root@localhost ~]# systemctl restart sshd
使用SSH客户端程序
交互式执行方式(人与机器之间的对话:账号+密码):
- ssh root@192.168.10.101
- 不便于自动化控制
命令程序ssh、scp、sftp
ssh命令程序远程登录
[root@localhst ~]ssh root@192.168.10.101
# 端口选项:-p 22
[root@localhst ~]ssh -p 22 root@192.168.10.101
scp命令远程复制
[root@localhost ~]# scp user@host:file1 file2
# 下载文件到客户端
[root@localhost ~]# scp file1 user@host:file2
# 上传文件到服务器
[root@localhost ~]# scp root@192.168.254.12:/etc/passwd /opt/user.txt
[root@localhost ~]# scp /opt/user.txt root@192.168.254.12:/home/test.txt
sftp命令安全FTP上传下载
[root@localhost ~]# sftp root@host
[root@localhost ~]# sftp root@192.168.10.101
[root@localhost ~]# get a.txt
# 下载文件,默认下载到登录时,所在目录
[root@localhost ~]# put b.txt
# 上传文件,默认上传到当前,所在目录
[root@localhost ~]# cd /opt
# 切换客户机目录
图形工具Xshell
构建密钥对验证的SSH体系
SSH进行用户身份认证时默认优先使用公钥认证(注:默认优先公钥认证的前提是配置了公钥)
免交互式(密钥对):
- SSH:客户端需要生成(公钥+私钥)
- 公钥:需要发送给服务器端(你想连谁,就把公钥发给谁),可以加密数据
- 私钥;自己保存,可以解密数据
私钥短语:解锁私钥
- 公钥与私钥是成双成对出现或生产的
- 可以公开的秘钥称为“公钥”,需要自己妥善保管不公开的秘钥称为“私钥”
- 信息机密领域:通过公钥加密,私钥解密来实现的;
- 数字签名:通过私钥加密。公钥解密来实现的;
- 无法通过公钥推算出私钥,也无法通过私钥推算出公钥
在客户机创建密钥对
ssh-keygen命令
可用的加密算法:RSA、ECDSA或DSA
[zhangsan@localhost ~]$ 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@localhost ~]$ scp ~/.ssh/id_ecdsa.pub root@172.16.16.22:/tmp
在服务器中导入公钥文本
-
将公钥文本添加至目标用户的公钥库
-
默认公钥库位置:~/.ssh/authorized_keys
[root@localhost ~]# mkdir /home/zhangsan/.ssh/
[root@localhost ~]# cat /tmp/id_ecdsa.pub >> /home/zhangsan/.ssh/authorized_keys
[root@localhost ~]# tail -1 /home/zhangsan/.ssh/authorized_keys
ecdsa-sha2-nistp256
AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBLJSnBhscYBfnnHxSY
AJEBD4sNkTLMF7itcFGM33RdeXU89QNQkMnCrCJHzAlZURrzpXG6Mp62mz9gRXUnARk8s =
zhangsan@localhost
客户端使用密钥对验证
- 验证用户:服务端的用户 zhangsan
- 验证密码:客户端的用户 zhangsan 的私钥短语
[zhangsan@localhost ~]$ ssh zhangsan@192.168.10.101
另一种方法
[root@localhost zhangsan ~]$ ssh-copy-id -i /home/zhangsan/.ssh/id_rsa.pub zhangsan@192.168.10.101
TCP Wrappers访问控制
TCP Wrappers概述
-
保护机制的实现方式
-
通过tcpd程序对其他服务程序进行包装
-
由其他服务程序调用libwrap.so.*链接库
-
-
访问控制策略的配置文件
-
/etc/hosts.allow
-
/etc/hosts.deny
-
TCP Wrappers的访问策略
保护对象为各种网卡服务程序,针对访问服务的客户端地址进行访问控制
策略格式
- 服务程序列表:客户端地址列表之间以冒号分隔,多个列表之间以逗号分隔
服务程序列表
- ALL :表示所有服务
- 单个服务程序:如“vsftpd”
- 多个服务程序组成的列表:如“vsftpd,sshd”
客户端地址列表
- ALL:任何客户端地址
- LOCAL:本机地址
- 单个IP地址:如“192.168.4.4”
- 网段地址:如“192.168.4.0/255.255.255.0”
- 以“.”开始的域名:如“192.168.4.”匹配整个192.168.4.0/24网段
- 嵌入通配符“*”“?”:前者代表任意长度字符,后者仅代表一个字符,如“10.0.8.2*” 匹配以 10.0.8.2开头的所有 IP 地址。不可与以“.”开始或结束的模式混用
- 多个客户端地址组成的列表:如“192.168.1.,172.16.16.,.bdqn.com”
访问控制基本原则
- 首先检查 /etc/hosts.allow文件,找到匹配并允许访问
- 再检查/etc/hosts.deny文件,找到匹配并拒绝访问
TCP Wrappers配置
- 仅允许从以下地址访问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
小阿轩yx-远程访问及控制