远程管理服务概念介绍
-
SSH:安全的远程连接,数据信息是加密的,端口是22
ssh 10.0.0.1
- 默认可以root用户远程连接
-
TELNET:不安全的远程连接,数据信息是明文的,端口是23
-
默认不能让root用户远程连接
-
服务端
yum install -y telnet-server systemctl start talnet.socket ps -ef | grep 23 systemd管理
-
客户端进行连接
telnet 10.0.0.1
-
什么是shell?
- 每连接登陆到一个linux系统中,就是一个shell
- 可以一个linux系统有多个会话连接,每一个会话都是一个shell
- 系统中用户可以实现相互转换,每转换一个用户就是一个shell
shell特点说明
-
一般命令行临时配置的信息,只会影响当前shell
-
命令配置的信息如果想生效,需要切换shell,输入bash进行切换
SSH服务连接工作原理
- 客户端执行远程连接命令
- 客户端、服务端建立三次握手过程
- 服务端让客户端进行确认是否接受服务端公钥信息
- 客户端进行公钥确认,接收到公钥信息
- 服务端让客户端确认登陆用户密码信息
- 客户端进行密码信息确认
- 客户端、服务端远程连接建立成功
公钥和私钥
- 私钥:钥匙
- 公钥:锁头
- 作用
- 利用私钥和公钥对数据信息进行加密处理
- 利用公钥和私钥进行用户身份认证
- 基于密码的方式进行远程连接,公钥和私钥只能完成数据加密过程
- 基于秘钥的方式进行远程连接:公钥和私钥可以完成身份认证工作
SSH远程连接的方式
- 基于口令的方式进行远程连接,连接比较麻烦,不太安全
- 基于秘钥的方式进行远程连接,连接方便,比较安全
- 客户端执行命令创建秘钥对
- 客户端建立远程连接(口令),发送公钥信息
- 客户端再次建立远程连接
- 服务端发送公钥质询信息(你的钥匙可以打开锁头嘛)
- 客户端处理公钥质询信息(钥匙将锁头打开),将质询信息结果返回给服务端
- 服务端接收到质询结果,建立好远程连接
SSH实现基于秘钥连接的部署步骤
-
客户端创建秘钥对
ssh-keygen -t dsa 一直回车
-
客户端需要将公钥进行分发
ssh-copy-id -i /root/.ssh/id_dsa.pub root@服务端ip
-
服务端进行检查是否传来了公钥
ll /root/.ssh/
-
进行远程连接测试,不用输入密码信息可以直接连接
ssh 服务端ip
脚本批量管理串行,执行效率慢
#!/bin/bash
for ip in {31,7,41}
do
sshpass -p 123456 ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.$ip -p 200 "-o StrictHostKeyChecking=no"
done
如何免交互进行传递公钥
yum install -y sshpass
sshpass -p 密码 ssh-copy-id -i /root/.ssh/id_dsa.pub root@10.0.0.1
如何解决不用输入yes或no确认信息
- 加上参数
"-o StrictHostKeyChecking=no"
如何指定端口进行连接
- 加上参数
-p 端口号
SSH服务配置文件:/etc/ssh/sshd.config
- sshd.config:服务端,ssh.config:客户端
- Port:修改服务端口信息
- ListenAddress 0.0.0.0:监听地址,指定哪块网卡能够接受远程访问请求
- 指定监听地址只能是本地网卡上有的地址
- PermitEmptyPasswords no:是否允许远程用户使用空密码进行登录,默认no,不允许
- PermitRootLogin yes:是否允许root用户进行远程登录,登陆后可以使用su 进行切换,建议改为no
- GSSAPIAuthentication no:是否开启GSSAPI认证功能,建议关闭
- UseDNS no:是否开启反向DNS解析功能,建议关闭
SSH远程服务防范案例
-
尽可能用秘钥登录,不用密码登录
-
防火墙封闭SSH,指定源ip限制
-
开启SSH只监听本地内网ip
-
尽可能不给服务器外网ip
-
最小化权限(软件安装-授权)
- 服务也尽可能少,越多开放的端口越多
-
给系统的重要文件或命令做一个指纹
/etc/passwd md5sum 11110000aaaabbb 监控 inotify /bin 监控
-
给它锁上chattr +i