1.SSH远程服务端

SSH服务由服务端软件OpenSSH和SSH客户端组成.
OpenSSH提供一个安全的远程Secure shell用于管理远程Linux系统.
OpenSSH使用非对称加密手段加密保护通信数据.

1.SSH建立在应用层基础之上的安全协议, 可靠, 提供安全的远程登录会话协议
2.SSH服务端后台启动名为sshd, 实时监听22端口,响应来自客户端的请求连接
3.SSH服务端几乎支持所有的UNIX平台, 同时有效的防止远程管理过程中信息泄露
4.SSH客户端适用多种平台(ssh远程连接\scp远程拷贝\sftp远程传输).

SSH服务详细概述
OpenSSH详细概述

2.SSH远程客户端

SSH是典型的客户端和服务端的交互模式, 客户端广泛的支持各个平台
WIndows有很多工具可以支持SSH连接功能, 建议使用Xshell
Linux平台需要安装客户端软件 yum install openssh-clients
安装SSH并实现开机自启动

[root@liyanzhao ~]# yum install openssh-server
[root@liyanzhao ~]# systemctl enable sshd
[root@liyanzhao ~]# systemctl start sshd

客户端连接SSH服务方式

[root@liyanzhao ~]# ssh remotehost
//使用ssh登陆远程主机
[root@liyanzhao ~]# ssh remoteuser@remotehost
//使用ssh服务不登陆远程主机执行命令
[root@liyanzhao ~]# ssh remoteuset@remotehost remote-command
Scp全量远程拷贝命令
-P 指定端口,默认22端口可不写(大写)
-r 递归拷贝目录
-p 属性不变
-l 限制速度
//推送:push(上传)
scp -P22 -pr /etc/inittab root@192.168.56.11:/tmp/
//拉取:pull(下载)
scp -P22 -pr root@192.168.56.11:/tmp/inittab /root/
注意: scp通过加密的远程拷贝, 支持数据推送和拉取, 但仅能全量拷贝效率低。
Sftp远程传输命令
//连接远程sftp
sftp root@192.168.56.12
//下载文件, 至于本地服务器
sftp> get conf.txt /tmp/
//上传本地服务器文件, 至远程服务器
sftp> put /root/t1.txt /root/

3.SSH远程登录方式

1.基于账户密码远程登录
知道服务器的IP端口,账号密码, 即可通过ssh客户端登陆远程主机, 远程主机联机过程中传输数据库都是加密的。

➜  ~ ssh -p22 root@192.168.56.11
root@192.168.56.11's password:
Last login: Mon Dec 18 16:33:38 2017 from 192.168.56.1
[root@A_Server ~]#

2.基于秘钥远程登录
默认情况下,通过ssh客户端登陆远程服务器, 需要提供远程系统上的帐号与密码,但为了降低密码泄露的机率和提高登陆的方便性, 建议使用密钥验证方式.

ssh key 使用非对称加密方式生成公钥和私钥
私钥存放在本地~/.ssh目录
公钥存储至需要登陆的服务器 ~/.ssh/authorized_keys

//为了免秘钥的安全性, 在A服务器建立普通用户, 被登陆的B服务器也需要有相同账户
[root@A_Server ~]# su - liyanzhao
//在A服务器上生成密钥,-t密钥类型, -C指定用户邮箱
[liyanzhao@A_Server ~]$ ssh-keygen -t rsa -C liyanzhao@foxmail.com
...
//默认一路回车即可, 当然也可以根据不同需求进行修改
...
//公钥发送B服务器, 输入B登录服务器密码, 会提示建立authorized_keys新文件
[liyanzhao@A_Server .ssh]$ ssh-copy-id -i ~/.ssh/id_rsa.pub liyanzhao@192.168.56.12
//A服务器使用普通用户密钥方式登陆B服务器
[liyanzhao@A_Server ~]$ ssh liyanzhao@192.168.56.12
Last login: Wed Dec 13 18:07:16 2017 from 192.168.56.1
[liyanzhao@B_Server ~]$
//可能遇到错误
1.no route to host   防火墙
2.Connection refused 防火墙或服务未启用

4.SSH配置安全防护

SSH服务登录防护手段
1.更改SSH服务远程登录端口
2.更改SSH服务监听本地内网IP
3.更改SSH服务禁止密码登录
4.更改SSH服务禁止ROOT管理员登录
5.更改SSH服务密码登录认证为密钥登录
6.重要服务器尽可能不使用公网IP地址
7.使用防火墙限制来源IP地址

SSH服务登录防护手段配置文件 /etc/ssh/sshd_config

//1.更改SSH远程连接端口
Port 6666
//2.绑定本地内网地址
ListenAddress 192.168.56.11
//3.禁止Root管理员登录
PermitRootLogin no
//4.禁止密码登录
PasswordAuthentication no
//允许以root密钥方式登陆(禁止密码默认以root登陆)
//PermitRootLogin without-password 
//5.禁止使用空密码(默认禁止)
PermitEmptyPasswords no
//6.关闭DNS解析,优化连接速度
UseDNS no
GSSAPIAuthentication no
//添加如下配置至sshd配置文件/etc/ssh/sshd_config, 根据需求做调整
###SSH###
Port 6666
ListenAddress 192.168.56.11
PasswordAuthentication no
PermitRootLogin no
#PermitEmptyPasswords no
GSSAPIAuthentication no
UseDNS no
###END###

5.SSH密钥分发实战

要求所有服务器在统一用户liyanzhao, 实现A机器从本地分发数据到B、C机器上,在分发到B、C的过程中不需要输入密码验证,当然除了分发的功能, 还可以批量查看所有客户机上的CPU,LOAD,MEM,系统版本等信息。即实现从A服务器发布数据到B、C客户端服务器以及查看信息的免密码登录验证解决方案

1.密钥批量分发

1.添加普通用户账号
//部署密钥之前,先分别在A、B、C服务器上添加普通用户并配置密码
useradd liyanzhao
echo "123456" | passwd --stdin liyanzhao
如下操作均在A-Server服务器上操作:
//2.A服务器切换普通用户并生成密钥
[root@A_Server ~]# su - liyanzhao
[liyanzhao@A_Server ~]$ ssh-keygen -t rsa -C A-Server.com
//3.A服务器分发秘钥至B服务器, SSH不是默认端口, 使用-P指定对应端口
[liyanzhao@A_Server ~]$ ssh-copy-id  -i /root/.ssh/id_rsa.pub "-p6666 root@192.168.56.12"
//4.通过A服务器登陆至B服务器测试
[liyanzhao@A_Server ~]$ ssh -p22 liyanzhao@192.168.56.12 
//5.分发A服务器秘钥至C服务器
[liyanzhao@A_Server ~]$ ssh-copy-id  -i /root/.ssh/id_rsa.pub "-p6666 root@192.168.56.13"
//6.通过A服务器登陆至C服务器测试
[liyanzhao@A_Server ~]$ ssh -p22 liyanzhao@192.168.56.13 

2.批量执行命令及文件分发

//批量执行命令脚本文件
[root@A_Server ~]# cat ssh_command.sh
#!/bin/bash
if [ $# -ne 1 ];then
    echo "USAGE $0: {Please Command}"
    exit 1
fi
Command="$1"
IP="192.168.56"
User=root
Port=6666
for i in 12 13
do
    echo "##Server IS $IP."$i"###"
    /usr/bin/ssh $User@$IP."$i" -p"$Port" "$Command"
done
//批量分发文件脚本
[root@A_Server ~]# cat ssh_file.sh
#!/bin/bash
if [ $# -ne 2 ];then
    echo "USAGE $0: {LocalFile|RemoteFile}"
    exit 1
fi
File1="$1"
DirFile="$2"
IP="192.168.56"
User=root
Port=6666
for i in 12 13
do
    echo "##Server IS $IP."$i"###"
    /usr/bin/scp -rp -P6666 $File1 $User@$IP."$i":"$DirFile"
    #/usr/bin/ssh $User@$IP."$i" -p"$Port" "$Command"
done

6.SSH企业项目案例

ssh 密钥实现批量分发备份、批量管理实战考试
时间:5 分钟
请准备有三台 linux 机器分别为 A ,B ,C,要求实现如下内容:
1.用自己的名字后面加 888(例如:liyanzhao888)的用户完成一把钥匙开多把锁(A 钥匙,B, C 锁)的免密码验证登陆部署场景,如下所示:

2.在不破坏题 1)的前提下,同样用自己的名字加 888 的用户完成多把钥匙开一把锁(B,C 钥匙,A 锁)的免密码验证登陆部署场景,如下所示:

3.如何实现从 A 指定目录批量分发文件到 B、C 用户的家目录(借助问题 1)的部署结果)。 时间:2 分钟
解答:考察 scp 用法

4.实现从 A 指定目录的文件分发到 B、C 的任意目录下(不用 root 用户如何实现)? 时间:5 分钟 解答:考察普通用户提权

5.如何快速查看所有机器的负载 load,CPU,内存等信息(借助问题 1)的部署结果)。 (思考:如果服务器数量多,如何并发查看和分发数据)
解答:时间:5 分钟

文档更新时间: 2019-07-11 13:16   作者:李延召