远程管理服务介绍

ssh

  • 安全的远程连接
  • 数据信息是加密的
  • ssh服务默认可以root用户远程连接
  • 系统远程连接

telnet

  • 不安全的远程连接
  • 数据信息是明文的
  • telnet服务默认不可以让root用户远程连接
  • 网络设备远程连接

什么是shell

  • 每连接登录到一个linux系统中,就是一个shell

QQ图片20191216185322.png

  • 可以一个linux系统有多个会话连接,每一个会话都是一个shell

QQ图片20191216185327.png

  • 系统中用户可以实现相互转换,每转换一个用户就是一个shell

QQ图片20191216185329.png

shell特点说明

  • 一般命令行临时配置的信息,只会影响当前shell
  • 命令配置的信息如果想生效,需要切换shell(比如修改主机名,设置命令提示符)

telnet连接主机

#如果软件不存在,则安装软件
yum install -y telnet-server
#启动软件
systemctl start telnet.socket
#连接服务端
telnet 172.16.1.41
#输入用户名和密码

ssh服务连接工作原理

私钥和公钥

  • 对数据信息进行加密处理
  • 进行用户身份认证
  • 密码方式连接,公钥和私钥只能完成数据加密过程
  • 秘钥方式连接,公钥和私钥可以完成身份认证工作

口令方式连接

  1. 客户端执行远程连接命令
  2. 客户端和服务端建立三次握手过程
  3. 服务端让客户端进行确认是否接收服务端公钥信息
  4. 客户端进行公钥确认,接收到公钥信息
  5. 服务端让客户端确认登录用户密码信息
  6. 客户端进行密码信息确认
  7. 客户端和服务端远程连接建立成功

密钥方式连接

  1. 客户端执行命令创建秘钥对
  2. 客户端建立远程连接(口令),发送公钥信息
  3. 客户端再次建立远程连接
  4. 服务端发送公钥质询信息
  5. 客户端处理公钥质询信息,将质询结果返回给服务端
  6. 服务端接收到质询结果,建立好远程连接

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

秘钥连接排错思路

  1. 利用命令进行连接测试
  2. 检查公钥在被管理主机上是否存在,并且与管理端公钥信息是否相同
  3. 利用公钥分发命令重新分发公钥
  4. 检查脚本的编写
  5. 调试脚本功能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客户端配置文件
  • sshsshd中,区别客户端和服务端的这个d,代表的是daemon,意思是守护进程
#服务端口信息
Port 22
#监听地址 指定一块网卡能够接受远程访问请求 指定监听地址只能是本地网卡上有的地址
ListenAddress 0.0.0.0
#是否允许远程用户使用空密码登录,默认不允许
PermitEmptyPasswords no
#是否禁止root用户远程连接主机
PermitRootLogin yes
#是否开启GSSAPI认证功能 建议关闭
GSSAPIAuthentication no
#是否开启反向DNS解析功能 建议关闭
UseDNS no

ssh远程服务防范入侵

  1. 用密钥登录,不用密码登录
  2. 防火墙封闭ssh,指定源IP限制(局域网、信任公网)
  3. 开启SSH只监听本地内网IP(ListenAddress 172.16.1.61)
  4. 尽量不给服务器外网IP
  5. 最小化文件权限
  6. 给系统重要文件或命令创建加密字符串(md5sum)
  7. 监控重要文件或命令(inotify)
  8. 给重要文件上锁chattr +i
  9. 入侵案例

相关命令总结

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连接