成功最有效的方法就是向有经验的人学习!

SSH远程管理服务实战

SSH基本概述

SSH是Secure Shell Protocol的简写,在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密处理,加密后在进行数据传输。确保了传递的数据安全。

1.那SSH远程服务主要功能如下

1.提供远程连接服务器的服务
2.对传输的数据进行加密

2.除了SSH远程连接服务, Telnet也能提供远程连接服务, 那么他们分别的区别是什么呢?

服务连接方式 服务数据传输 服务监听端口 服务登陆用户
ssh 加密 22/tcp 默认支持root用户登陆
telnet 明文 23/tcp 不支持root用户登陆

文字解释如下

ssh服务会对传输数据进行加密, 监听在本地22/tcp端口, ssh服务默认支持root用户登录
telnet服务不对数据进行加密, 监听在本地23/tcp端口, Telnet默认不支持root用户登录

1.安装telnet服务并运行

[root@m01 ~]# yum install telnet-server -y
[root@m01 ~]# systemctl start telnet.socket

3.telnet是无法使用root用户登录Linux系统,需要创建普通用户

[root@m01 ~]# useradd cgl
[root@m01 ~]# echo "123456"  | passwd --stdin cgl

SSH相关命令

SSH是典型的客户端和服务端的交互模式,简称C/S架构,客户端支持多个平台

Windows客户端(Xshell、CRT)
Mac\Linux客户端(ssh命令)

---与数据加密相关的软件openssl
[root@backup ~]# yum provides `which ssh`
[root@backup ~]# rpm -ql openssh-server
/etc/ssh/sshd_config    --- ssh服务配置文件
/usr/sbin/sshd          --- ssh服务进程启动命令
[root@backup ~]# rpm -ql openssh-clients
/usr/bin/scp            --- 远程拷贝命令
/usr/bin/sftp           --- 远程文件传输命令
/usr/bin/slogin         --- 远程登录命令
/usr/bin/ssh            --- 远程连接登录命令
/usr/bin/ssh-copy-id    --- 远程分发公钥命令

ssh客户端包含ssh以及像scp(远程拷贝)、slogin(远程登陆)、sftp(安全FTP文件传输)等应用程序。

1.ssh远程登录服务器命令

//SSH连接远程主机命令的基本语法
ssh -p22 cgl@10.0.0.61 [命令]

# -p(小写), 指定连接远程主机端口,默认22端口可省略
# cgl@remotehost
# "@"前面为用户名,如果用当前用户连接,可以不指定用户
# "@"后面为要连接的服务器的IP

2.scp复制数据至远程主机命令(全量复制)

# scp连接远程主机命令的基本语法;
# -P(大写) 指定端口,默认22端口可不写
# -r 表示递归拷贝目录
# -p 表示在拷贝文件前后保持文件或目录属性不变
# -l 限制传输使用带宽(默认kb)

推:PUSH,上传
# scp -P22 -rp /tmp/cgl cgl@10.0.0.150:/tmp
# /tmp/cgl为本地的目录。
# “@”前为用户名
# “@”后为要连接的服务器的IP。
# IP后的:/tmp目录,为远端的目标目录。
# 说明: 以上命令作用是把本地/tmp/cgl推送至远端服务器10.0.0.150的/tmp目录

拉:PULL,下载
# scp -P22 -rp root@10.0.0.7:/tmp/cgl /opt/
# 还可以将远端目录或文件拉取至本地

结论:
1.scp通过加密进行远程拷贝文件或目录的命令。
2.scp拷贝权限为连接的用户对应的权限。
3.scp支持数据的推送和拉取,但每次都是全量拷贝,效率低下。

3.Sftp远程数据传输命令

连接远程sftp
# sftp root@192.168.56.12
# sftp -oPort=52113 root@10.0.0.41 <-sftp的特殊端口连接

# 下载文件, 至于本地服务器
sftp> get conf.txt /tmp/

# 上传本地服务器文件, 至远程服务器
sftp> put /root/t1.txt /root/

SSH连接方式

1.基于账户密码远程登录

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

➜  ~ ssh -p22 root@10.0.0.60
root@10.0.0.60's password:
[root@m01 ~]#

2.基于秘钥远程登录

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

file

1.在管理服务器上生成密钥,-t密钥类型, -C指定用户邮箱

[root@m01 ~]# ssh-keygen -t rsa -C 21108858@qq.com
...
//默认一路回车即可, 当然也可以根据不同需求进行修改
...

2.将A服务器上的公钥推送至B服务器

//命令示例: ssh-copy-id [-i [identity_file]] [user@]machine
ssh-copy-id //命令
-i          //指定下发公钥的路径
[user@]     //以什么用户身份进行公钥分发(root),如果不输入,表示以当前系统用户身份分发公钥
machine     //下发公钥至那台服务器, 填写远程主机IP地址

//秘钥分发, [会将A服务器的公钥写入B服务器~/.ssh/authorized_keys文件中]
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.41

3.A服务器通过密钥方式连接B服务器

//远程登录对端主机方式
[root@m01 ~]# ssh root@172.16.1.41
[root@nfs ~]#

//不登陆远程主机执行命令
[root@m01 ~]# ssh root@172.16.1.41 "hostname -i"
172.16.1.41

//可能遇到错误
1.no route to host   防火墙
2.Connection refused 防火墙或服务未启用

实战案例1 SSH服务密钥分发实战

1.实现m01服务器通过密钥登录backup和nfs服务器
2.实现m01服务器查看backup和nfs的服务器的状态信息(无需密码)

角色 外网IP 内网IP 用户
m01分发密钥 eth0:10.0.0.61 eth1:172.16.1.61 root
nfs被控端 eth0:10.0.0.31 eth1:172.16.1.31 root
backup被控端 eth0:10.0.0.41 eth1:172.16.1.41 root

1.在m01控制端生成密钥

[root@m01 ~]# ssh-keygen -t rsa -C A-Server.com

2.分发密钥,如果SSH不是使用默认22端口, 使用-P指定对应端口

[root@m01 ~]# ssh-copy-id  -i /root/.ssh/id_rsa.pub "-p6666 root@172.16.1.31"
[root@m01 ~]# ssh-copy-id  -i /root/.ssh/id_rsa.pub "-p6666 root@172.16.1.41"

3.在m01管理机上测试是否成功登陆两台服务器

[root@m01 ~]# ssh -p6666 root@1172.16.1.41
[root@nfs01 ~]#

[root@m01 ~]# ssh -p6666 root@1172.16.1.31
[root@backup ~]# 

实战案例2 Window实现秘钥登录Linux服务器

1.Xshell工具->新建密钥生成工具->猛击下一步
2.连接服务器,在当前用户的家目录创建`.ssh`目录(权限700)
3.在`.ssh`目录新建`authorized_keys`,权限是`600`
4.找到xshell里面工具->用户秘钥管理者->选中对应的秘钥->属性->公钥->复制
5.将复制好的公钥粘贴至`~/.ssh/authorized_keys`中,保存,然后测试

实战案例3 SSH相关习题

1.使用root用户完成一把钥匙开多把锁A钥匙,BC锁

//1.创建公钥和私钥(A)
[root@manager ~]# ssh-keygen 
//分发A公钥至(BC)
[root@manager ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.31
[root@manager ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.41

2.在不破坏题1的前提下,完成多把钥匙开一把锁BC钥匙,A锁

//1.生成公钥和私钥(B)
[root@nfs01 ~]# ssh-keygen 
//2.B下发公钥给A
[root@nfs01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub  root@172.16.1.61

//3.生成公钥和私钥(C)
[root@nfs01 ~]# ssh-keygen 
//4.C下发公钥给A
[root@backup ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.61

3.如何实现从A指定目录或文件分发到BC服务器

[root@manager ~]# scp manager-web root@172.16.1.31:/tmp
manager-web                 100%    0     0.0KB/s   00:00    
[root@manager ~]# scp manager-web root@172.16.1.41:/tmp
manager-web                 100%    0     0.0KB/s   00:00  

4.如何快速查看所有机器的load,CPU,Memory等信息(思考:如果服务器数量多,如何并发查看和分发数据)

[root@manager ~]# cat test.sh 
#!/usr/bin/bash
[ $# -ne 1 ] && echo "请输入执行的命令" && exit 1

for i in 31 41
do
    echo "#########172.16.1.$i#####"
    ssh root@172.16.1.$i "$1"
done

4.SSH访问控制
SSH远程服务访问控制手段

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

SSH入侵网友案例

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

Port 6666                   # 变更SSH服务远程连接端口
ListenAddress 10.0.0.61     # 绑定本地内网地址
PermitRootLogin             # 是否允许root用户远程登录
PasswordAuthentication      # 是否允许使用密码登录
UseDNS                      # 是否进行dns反向解析,影响ssh连接效率参数
GSSAPIAuthentication        # 是否进行认证,影响ssh连接效率参数

SSH配置实例, 添加如下配置至/etc/ssh/sshd_config, 根据业务需求调整配置

###SSH###
Port 6666
ListenAddress 10.0.0.61
#PasswordAuthentication no
#PermitRootLogin no
GSSAPIAuthentication no
UseDNS no
###END###
赞(0) 打赏
未经允许不得转载:陈桂林博客 » SSH远程管理服务实战
分享到

大佬们的评论 抢沙发

全新“一站式”建站,高质量、高售后的一条龙服务

微信 抖音 支付宝 百度 头条 快手全平台打通信息流

橙子建站.极速智能建站8折购买虚拟主机

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

登录

找回密码

注册