ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第五章•SSH远程管理服务实战

2021-02-27 10:32:15  阅读:155  来源: 互联网

标签:10.0 第五章 SSH 远程管理 服务器 root 远程 ssh


1、SSH基本概述

SSH是一个安全协议,在进行数据传输时,会对数据包进行加密处理,加密后在进行数据传输。确保了数据传输安全。那SSH服务主要功能有哪些呢?

 

1.提供远程连接服务器的服务

2.对传输的数据进行加密

 

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

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

 

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

服务连接方式

服务数据传输

服务监听端口

服务登入用户

Ssh

加密

22/tcp

默认支持root用户登入

telnet

明文

23/tcp

不支持root用户登入

案例: 使用wireshark验证telnet明文传输与ssh加密传输

  1. 安装telnet服务并运行

[root@sunedu ~]# yum -y install telnet-server

[root@sunedu ~]# systemctl start telnet.socket

1.2、使用wireshark检测vmnet8网卡上telnet的流量

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

[root@sunedu ~]# useradd sun

[root@sunedu ~]# echo "1" | passwd --stdin sun

Changing password for user sun.

passwd: all authentication tokens updated successfully.

1.4、使用普通用户进行telnet登入

1.5、搜索wireshark包含telnet相关的流量

1.6、使用wireshark分析ssh流量

2、SSH相关命令

SSH有客户端与服务端,我们将这种模式称为C/S架构,ssh客户端支持Windows、Linux、Mac等平台。

在ssh客户端中包含 ssh|slogin远程登陆、scp远程拷贝、sftp文件传输、ssh-copy-id秘钥分发等应用程序。、

2.1、ssh远程登录服务器命令事例

[root@sunedu ~]# ssh -p22 10.0.0.200

# -p指定连接远程主机端口,默认22端口可省略

# root@remotehost

# "@"前面为用户名,如果用当前用户连接,可以不指定用户

# "@"后面为要连接的服务器的IP

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

# -P 指定端口,默认22端口可不写

# -r 表示递归拷贝目录

# -p 表示在拷贝文件前后保持文件或目录属性不变

# -l 限制传输使用带宽(默认kb)

 

#推:将本地/tmp/www推送至远端服务器10.0.0.61的/tmp目录,使用对端的root用户

[root@m01 ~]# scp -P22 -rp /tmp/www oldboy@10.0.0.61:/tmp

 

#拉:将远程10.0.0.61服务器/tmp/www文件拉取到本地/opt/目录下

[root@m01 ~]# scp -P22 -rp root@10.0.0.61:/tmp/www /opt/

 

#限速

[root@m01 ~]# scp /opt/1.txt root@172.16.1.31:/tmp

root@172.16.1.31 password:

test 100% 656MB '83.9MB/s' 00:07

#限速为8096kb,换算为MB,要除以 8096/8=1024KB=1MB

[root@m01 ~]# scp -rp -l 8096 /opt/1.txt root@172.16.1.31:/tmp

root@172.16.1.31s password:

test 7% 48MB '1.0MB/s' 09:45

结论:

  • scp通过ssh协议加密方式进行文件或目录拷贝。
  • scp连接时的用户作为为拷贝文件或目录的权限。
  • scp支持数据推送和拉取,每次都是全量拷贝,效率较低。

2.3、Sftp远程数据传输命令

#默认可以通过sftp命令连接sftp服务

sftp root@10.0.0.61

sftp -oPort=52113 root@10.0.0.61 #sftp的特殊端口连接

 

# sftp使用get下载文件至于本地服务器

sftp> get conf.txt /tmp/

 

# sftp使用put上传本地服务器文件至远程服务器

sftp> put /root/t1.txt /root

3、SSH验证方式

3.1、基于账户密码远程登入

知道服务器的IP端口,账号密码,即可通过ssh客户端命令登陆远程主机

~ ssh -p22 root@10.0.0.61

root@10.0.0.61 password:

[root@m01 ~]#

3.2、基于秘钥远程登入

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

  • 在服务器上生成非对称密钥,使用-t指定密钥类型, 使用-C指定用户邮箱

[root@sunedu ~]# ssh-keygen -t rsa -C sunyuhang@qq.com

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

#命令示例: ssh-copy-id [-i [identity_file]] [user@]machine

ssh-copy-id #命令

-i #指定下发公钥的路径

[user@] #以什么用户身份进行公钥分发(root),如果不输入,表示以当前系统用户身份分发公钥

machine #下发公钥至那台服务器, 填写远程主机IP地址

 

#分发秘钥,[将A服务器的公钥写入B服务器~/.ssh/authorized_keys文件中]

[root@sunedu ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.0.0.241

  • A服务器连接B服务器是无需密码的,如果能直接连接无需密码则表示秘钥已配置成功

#远程登录对端主机方式

[root@sunedu ~]# ssh root@10.0.0.241

Last login: Fri Feb 26 22:50:22 2021 from 10.0.0.1

[root@backup ~]#

 

#不登陆远程主机bash,但可在对端主机执行命令

[root@sunedu ~]# ssh root@10.0.0.241 "hostname -i"

fe80::497c:fa43:7071:f8f9%eth0 fe80::b517:7496:e9e9:9036%eth1 fe80::d5d9:1e05:c535:3017%eth0 10.0.0.241 172.16.1.41

4、SSH场景实践

实践场景,用户通过Windows/MAC/Linux客户端连接跳板机免密码登录,跳板机连接后端无外网的Linux主机实现免密登录,架构图如下。

实践多用户登陆一台服务器无密码

实践单用户登陆多台服务器免密码

4.1、windows客户端使用Xshell生成秘钥对,并下发公钥至跳板机

  • Xshell-->选择工具->新建密钥生成工具

  • 生成公钥对,选择下一步

  • 填写秘钥名称。秘钥增加密码则不建议配置

  • window会提示密码,继续即可

  • 生成秘钥后,点击Xshell->工具->用户秘钥管理者->选择对应秘钥的属性

  • 选择对应秘钥的公钥,将其复制

  • 将从WIndows下复制好的公钥粘贴至跳板机~/.ssh/authorized_keys中,然后测试

[root@sunedu ~]# cd ; umask 077 mkdir -p .ssh ; cd .ssh

[root@sunedu .ssh]# vim authorized_keys

4.2、跳板机下发公钥至后端主机

  • 在跳板机上生成秘钥对

[root@sunedu ~]# ssh-keygen -t rsa -C 111@qq.com

  • 拷贝跳板机上的密钥至后端主机,如果SSH不是使用默认22端口, 使用-p指定对应端口

[root@sunedu ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub -p22 root@10.0.0.241

  • 在管理机上测试是否成功登陆

[root@sunedu ~]# ssh root@10.0.0.241

Last login: Sat Feb 27 10:08:41 2021 from 10.0.0.200

[root@backup ~]# logout

  • 通过跳板机获取所有机器的load,CPU,Memory等信息(思考:如果服务器数量多,如何并发查看和分发数据)

[root@m01 ~]# cat all.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

  • 脚本实现(跳板机)

#!/bin/bash

#jumpserver

lb01=10.0.0.5

lb02=10.0.0.6

web01=10.0.0.7

web02=10.0.0.8

web03=10.0.0.9

nfs=10.0.0.31

backup=10.0.0.41

db01=10.0.0.51

m01=10.0.0.61

zabbix=10.0.0.71

 

menu(){

cat <<-EOF

+-------------------------+

| 1) lb01 |

| 2) lb02 |

| 3) web01 |

| 4) web02 |

| 5) web03 |

| 6) nfs |

| 7) backup |

| 8) db01 |

| 9) m01 |

| 10) zabbix |

| h) help |

+-------------------------+

EOF

}

#菜单函数

menu

 

#连接函数

connect(){

ping -c 1 -w 1 $1 &>/dev/null

if [ $? -eq 0 ];then

ssh root@$1

else

echo -e "\033[5;4;40;31m 别连了,我的哥,$2:$1机器都没开!!!\033[0m"

fi

}

 

#控制不让输入ctrl+c,z

trap "" HUP INT TSTP

while true

do

read -p "请输入要连接的主机编号:" num

case $num in

1|lb01)

connect $lb01 lb01

;;

2|lb02)

connect $lb02 lb02

;;

3|web01)

connect $web01 web01

;;

4|web02)

connect $web02 web02

;;

5|web03)

connect $web03 web03

;;

6|nfs)

connect $nfs nfs

;;

7|backup)

connect $backup backup

;;

8|db01)

connect $db01 db01

;;

9|m01)

connect $m01 m01

;;

10|zabbix)

connect $zabbix zabbix

;;

h|help)

clear

menu

;;

close)

break

;;

esac

done

5、SSH安全优化

SSH作为远程连接服务,通常我们需要考虑到该服务的安全,所以需要对该服务进行安全方面的配置。

  • 更改远程连接登陆的端口
  • 禁止ROOT管理员直接登录
  • 密码认证方式改为密钥认证
  • 重要服务不使用公网IP地址
  • 使用防火墙限制来源IP地址

SSH服务登录防护需进行如下配置调整,先对如下参数进行了解

Port 6666 # 变更SSH服务远程连接端口

PermitRootLogin no # 禁止root用户直接远程登录

PasswordAuthentication no # 禁止使用密码直接远程登录

UseDNS no # 禁止ssh进行dns反向解析,影响ssh连接效率参数

GSSAPIAuthentication no # 禁止GSS认证,减少连接时产生的延迟

将如下具体配置添加至/etc/ssh/sshd_config文件中,参数需根据实际情况进行调整

###SSH###

#Port 6666

#PasswordAuthentication no

#PermitRootLogin no

GSSAPIAuthentication no

UseDNS no

###END###

6、免交互expect[扩展]

1.安装expect

 

[root@m01 ~]# yum install -y expect

2.编写expect脚本

 

#!/usr/bin/expect

set ip 10.0.0.51

set pass 123456

set timeout 30

spawn ssh root@$ip

expect {

"(yes/no)" {send "yes\r"; exp_continue}

"password:" {send "$pass\r"}

}

expect "root@*" {send "df -h\r"}

expect "root@*" {send "exit\r"}

expect eof

7、免交互sshpass[扩展]

1.安装sshpass

 

[root@m01 ~]# yum install -y sshpass

2.使用sshpass命令

 

[root@m01 ~]# sshpass -p 123456 ssh root@10.0.0.51

 

[option]

-p:指定密码

-f:从文件中取密码

-e:从环境变量中取密码

-P:设置密码提示

标签:10.0,第五章,SSH,远程管理,服务器,root,远程,ssh
来源: https://www.cnblogs.com/sunyuhang1/p/14454962.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有