远程管理服务介绍
ssh
- 安全的远程连接
- 数据信息是加密的
- ssh服务默认可以root用户远程连接
- 系统远程连接
telnet
- 不安全的远程连接
- 数据信息是明文的
- telnet服务默认不可以让root用户远程连接
- 网络设备远程连接
什么是shell
- 每连接登录到一个linux系统中,就是一个shell
- 可以一个linux系统有多个会话连接,每一个会话都是一个shell
- 系统中用户可以实现相互转换,每转换一个用户就是一个shell
shell特点说明
- 一般命令行临时配置的信息,只会影响当前shell
- 命令配置的信息如果想生效,需要切换shell(比如修改主机名,设置命令提示符)
telnet连接主机
#如果软件不存在,则安装软件
yum install -y telnet-server
#启动软件
systemctl start telnet.socket
#连接服务端
telnet 172.16.1.41
#输入用户名和密码
ssh服务连接工作原理
私钥和公钥
- 对数据信息进行加密处理
- 进行用户身份认证
- 密码方式连接,公钥和私钥只能完成数据加密过程
- 秘钥方式连接,公钥和私钥可以完成身份认证工作
口令方式连接
- 客户端执行远程连接命令
- 客户端和服务端建立三次握手过程
- 服务端让客户端进行确认是否接收服务端公钥信息
- 客户端进行公钥确认,接收到公钥信息
- 服务端让客户端确认登录用户密码信息
- 客户端进行密码信息确认
- 客户端和服务端远程连接建立成功
密钥方式连接
- 客户端执行命令创建秘钥对
- 客户端建立远程连接(口令),发送公钥信息
- 客户端再次建立远程连接
- 服务端发送公钥质询信息
- 客户端处理公钥质询信息,将质询结果返回给服务端
- 服务端接收到质询结果,建立好远程连接
ssh实现基于秘钥连接
主机名称和IP地址规划
服务 | 主机名 | eth0网卡IP | eth1网卡IP | 软件 |
---|---|---|---|---|
防火墙服务器 | firewalld | 10.0.0.81 | 172.16.1.81 | firewalld |
负载均衡服务器 | lb01 | 10.0.0.5 | 172.16.1.5 | nginx,keepalived |
负载均衡服务器 | lb02 | 10.0.0.6 | 172.16.1.6 | nginx,keepalived |
web服务器 | web01 | 10.0.0.7 | 172.16.1.7 | nginx |
web服务器 | web02 | 10.0.0.8 | 172.16.1.8 | nginx |
web服务器 | web03 | 10.0.0.9 | 172.16.1.9 | nginx |
存储服务器 | nfs01 | 10.0.0.31 | 172.16.1.31 | nfs |
备份服务器 | backup | 10.0.0.41 | 172.16.1.41 | rsync |
数据库服务器 | db01 | 10.0.0.51 | 172.16.1.51 | mysql,mariaDB |
批量管理服务器 | m01 | 10.0.0.61 | 172.16.1.61 | ansible |
跳板机服务器 | jumpserver | 10.0.0.71 | 172.16.1.71 | jumpserver |
监控服务器 | zabbix | 10.0.0.72 | 172.16.1.72 | zabbix |
缓存服务器 | 暂无 | 暂无 | 暂无 | 暂无 |
客户端创建秘钥对信息
#创建dsa密钥对
ssh-keygen -t dsa
#创建rsa密钥对
ssh-keygen -t rsa
- 命令结果
[root@m01 ~]# ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
SHA256:XoRricbVJtPRH5llJEBJ8IJV2HuKr/gfXqHWV0nwugE root@m01
The key's randomart image is:
+---[DSA 1024]----+
| +O=+.=+|
| *.o+ *o |
| * *E.o + |
| . o B .o = .|
| + S .. =...|
| . o .. .oo..|
| . .+.o .|
| . o.o . |
| ..ooo |
+----[SHA256]-----+
客户端将公钥进行分发
#发放dsa密钥对
ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.31
#发放rsa密钥对
ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.16.1.31
- 命令结果
[root@m01 ~]# ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.31
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_dsa.pub"
The authenticity of host '172.16.1.31 (172.16.1.31)' can't be established.
ECDSA key fingerprint is SHA256:MC0ToP0sqGJFsc2R81Z2fhoSk51YznYRv6eskWERDg0.
ECDSA key fingerprint is MD5:e4:a3:00:75:0d:a3:39:a0:98:38:fe:5b:a8:62:04:f8.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@172.16.1.31's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@172.16.1.31'"
and check to make sure that only the key(s) you wanted were added.
进行远程连接测试
可以不输入密码直接连接
ssh 172.16.1.31
秘钥连接排错思路
- 利用命令进行连接测试
- 检查公钥在被管理主机上是否存在,并且与管理端公钥信息是否相同
- 利用公钥分发命令重新分发公钥
- 检查脚本的编写
- 调试脚本功能
sh -x
通过脚本批量管理多台主机,并分发密钥
需要解决命令确认信息
需要解决命令的输入密码步骤
服务端端口改变
在命令后面加入参数解决命令确认信息
#如果没有创建过秘钥对,需要先创建秘钥对
ssh-keygen -t dsa
#第一次连接后
#客户端会出现公钥文件`~/.ssh/known_hosts`
#服务端会出现公钥文件`~/.ssh/authorized_keys`
ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.41 "-o StrictHostKeyChecking=no"
安装sshpass
yum install -y sshpass
使用免交互方式分发公钥
sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.41
服务端端口不为22时,设置端口号
sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.41 -p 52113 "-o StrictHostKeyChecking=no"
编写脚本分发密钥
vi give_pub_key.sh
#!/bin/bash
for ip in {7,31,41}
do
sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.$ip -p 22 "-o StrictHostKeyChecking=no" &> /dev/null
echo -e "host 172.16.1.$ip give success."
done
编写脚本检查分发结果
vi check_pub_key.sh
for ip in {7,31,41}
do
ssh 172.16.1.$ip hostname
done
ssh服务配置文件
/etc/ssh/sshd_config
服务端配置文件/etc/ssh/ssh_config
客户端配置文件ssh
和sshd
中,区别客户端和服务端的这个d
,代表的是daemon
,意思是守护进程
#服务端口信息
Port 22
#监听地址 指定一块网卡能够接受远程访问请求 指定监听地址只能是本地网卡上有的地址
ListenAddress 0.0.0.0
#是否允许远程用户使用空密码登录,默认不允许
PermitEmptyPasswords no
#是否禁止root用户远程连接主机
PermitRootLogin yes
#是否开启GSSAPI认证功能 建议关闭
GSSAPIAuthentication no
#是否开启反向DNS解析功能 建议关闭
UseDNS no
ssh远程服务防范入侵
- 用密钥登录,不用密码登录
- 防火墙封闭ssh,指定源IP限制(局域网、信任公网)
- 开启SSH只监听本地内网IP(ListenAddress 172.16.1.61)
- 尽量不给服务器外网IP
- 最小化文件权限
- 给系统重要文件或命令创建加密字符串(md5sum)
- 监控重要文件或命令(inotify)
- 给重要文件上锁
chattr +i
- 入侵案例
相关命令总结
ssh
- ssh-keygen : 创建秘钥对
- ssh-copy-id : 分发密钥
- sshpass : 免交互输入密码
- ssh : ssh远程连接
- scp : 基于ssh,安全传输数据
sftp
- sftp 172.16.1.41 : sftp连接服务端
- ls : 查看远程ftp服务器信息
- cd : 查看远程ftp服务器信息
- lls : 查看本地ftp客户端信息
- lcd : 查看本地ftp客户端信息
- get : 下载信息
- put : 上传信息
- help : 查看命令帮助
- bye : 退出ftp连接
最后一次更新于2023-04-11 16:33
0 条评论