SSH远程管理服务实战

目录

  • SSH远程管理服务实战

    • 1.SSH基本概述
    • 2.SSH相关命令
    • 3.Xshell连接不上虚拟机
    • 4.scp命令
    • 5.sftp命令
    • 6.SSH验证方式
    • 7.SSH场景实践
    • 8.SH安全优化
    • 9.交互expect[扩展]
    • 10.免交互sshpass[扩展]

SSH远程管理服务实战

1.SSH基本概述

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

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

那么除了SSH协议能提供远程连接服务,Telnet也能提供远程连接服务, 那么分别的区别是什么呢?ssh服务会对传输数据进行加密, 监听在本地22/tcp端口, ssh服务默认支持root用户登录telnet服务不对数据进行加密, 监听在本地23/tcp端口, Telnet默认不支持root用户登录

Linux远程链接:ssh协议(加密) telnet(明文)

windows远程连接:RDP协议 (remote desktop)

协议 端口
ssh 22
telnet 23
RDP 3389
http 80
https 443
FTP 20 21
POP3 110
MySQL 3306
Rsync 873
DNS 53

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

1.安装telnet服务并运行

[[email protected] ~]# yum install telnet-server -y
[[email protected] ~]# systemctl start telnet.socket

2.使用wireshark检测vmnet8网卡上telnet的流量

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

[[email protected] ~]# useradd zls
[[email protected] ~]# echo "1"| passwd --stdin zls

4.使用普通用户进行telnet登录

5.搜索wireshark包含telnet相关的流量

?

6.使用wireshark分析ssh流量

2.SSH相关命令

*SSH有客户端与服务端,我们将这种模式称为C/S架构,ssh客户端支持Windows、Linux、Mac等平台。在ssh客户端中包含 ssh|slogin远程登陆、scp远程拷贝、sftp文件传输、ssh-copy-id秘钥分发等应用程序。

[[email protected] ~]# ssh [email protected]
ssh:客户端命令
root:系统用户名
@:分割用户和主机
10.0.0.41:主机的IP(可以是公网也可以是内网)

3.Xshell连接不上虚拟机

1.检查网络

#连谁ping谁
ping 10.0.0.41
tcping 10.0.0.41 22

2.检查端口

telnet 10.0.0.41 22
tcping 10.0.0.41 22

3.如果可以ping通,端口不通

#检测sshd服务是否启动
netstat -lntup|grep 22

#防火墙 selinux
systemctl stop firewalld
setenforce 0

4.scp命令

# -P 指定端口,默认22端口可不写
# -r 表示递归拷贝目录
# -p 表示在拷贝文件前后保持文件或目录属性不变
# -l 限制传输使用带宽(默认kb)

#推:将本地/tmp/oldboy推送至远端服务器10.0.0.31的/tmp目录,使用对端的root用户
[[email protected] ~]# scp -P22 -rp /tmp/oldboy [email protected]:/tmp

#拉:将远程10.0.0.31服务器/tmp/oldboy文件拉取到本地/opt/目录下
[[email protected] ~]# scp -P22 -rp [email protected]:/tmp/oldboy /opt/

#限速
[[email protected] ~]# scp /opt/1.txt [email protected]:/tmp
[email protected] password:
test                        100%  656MB  '83.9MB/s'   00:07
#限速为8096kb,换算为MB,要除以 8096/8=1024KB=1MB
[[email protected] ~]# scp -rp -l 8096  /opt/1.txt [email protected]:/tmp
[email protected] password:
test                        7%   48MB   '1.0MB/s'   09:45 

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

5.sftp命令

#默认可以通过sftp命令连接sftp服务
sftp [email protected]
sftp -oPort=52113 [email protected]  #sftp的特殊端口连接

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

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

6.SSH验证方式

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

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

[[email protected] ~]# ssh -p22 [email protected]
[email protected] password:

2.基于秘钥远程登录

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

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

[[email protected] ~]# ssh-keygen -t rsa -C [email protected]
...
#默认一路回车即可
...

或者简单的方法,不加参数:
[[email protected] ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:P6UswOccoZSLunZ0gekcQ/gDzhFNkH/+I1WHhtwQro8 [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|  oB.   ..       |
|  = o  o.        |
| o * oo.o+ .     |
|  o O+o+o.= .    |
|   o.**.So ..    |
|   .+ oB.+ o     |
|  .. .Eo= =      |
|  ... . o. .     |
| ...   . .       |
+----[SHA256]-----+

[[email protected] ~]# ll .ssh/
total 8
-rw------- 1 root root 1679 Aug  8 19:07 id_rsa         #私钥(宝塔镇河妖)
-rw-r--r-- 1 root root  390 Aug  8 19:07 id_rsa.pub     #公钥(天王盖地虎)

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

方式一(手动):
#在要连接的服务器上家目录下创建.ssh目录(用哪个用户连,就创建在哪个家目录下)
[[email protected] ~]# mkdir /root/.ssh
#授权700
[[email protected] ~]# chmod 700 /root/.ssh

#在m01上查看公钥文件内容
[[email protected] ~]# cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDuxyeePaQr6cI6KMINgW7262dDdfgiiwspNjKYEoEj7cfjpMBPBCpqTO4H5+E8U/GcxsFcj2S2fHlRevPMa8vXYqOvX3O0Xp/C9zNMJrNdT+NdpCnDHRpsF4/Egr0xxKju7LPC1qz/Gu6ksx1VqUmcX2RKrQdV2BYi+pqu/2SQYOUUjKpen0zWxnhjuVmZMV+hPHgs4ILbGwwmYxqY+ldvP0guviQ2CeK1JtQIbP2Q5bBSlMwPxr4P303LUkIBsI3pHRoCMnDT0YI9x9JjdRkkUNjeFoTAE4APsTgICd6nzRBfRRf/VOYk5REuub367yxrOZpfNXOcJ6QCRLYQl6Xn [email protected]

#创建公钥文件authorized_keys
[[email protected] ~]# vim ~/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDuxyeePaQr6cI6KMINgW7262dDdfgiiwspNjKYEoEj7cfjpMBPBCpqTO4H5+E8U/GcxsFcj2S2fHlRevPMa8vXYqOvX3O0Xp/C9zNMJrNdT+NdpCnDHRpsF4/Egr0xxKju7LPC1qz/Gu6ksx1VqUmcX2RKrQdV2BYi+pqu/2SQYOUUjKpen0zWxnhjuVmZMV+hPHgs4ILbGwwmYxqY+ldvP0guviQ2CeK1JtQIbP2Q5bBSlMwPxr4P303LUkIBsI3pHRoCMnDT0YI9x9JjdRkkUNjeFoTAE4APsTgICd6nzRBfRRf/VOYk5REuub367yxrOZpfNXOcJ6QCRLYQl6Xn [email protected]

#授权600
[[email protected] ~]# chmod 600 ~/.ssh/authorized_keys

方式2:

方式二:
#使用命令推送公钥
[[email protected] ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
---->yes--->密码
#命令示例: ssh-copy-id [-i [identity_file]] [[email protected]]machine
ssh-copy-id #命令
-i          #指定下发公钥的路径
[[email protected]]     #以什么用户身份进行公钥分发(root),如果不输入,表示以当前系统用户身份分发公钥
machine     #下发公钥至那台服务器, 填写远程主机IP地址

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

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

#远程登录对端主机方式
[[email protected] ~]# ssh [email protected]

#不登陆远程主机bash,但可在对端主机执行命令
[[email protected] ~]# ssh [email protected] "hostname -i"
172.16.1.41

7.SSH场景实践

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

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

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

?

2) 生成公钥对,选择下一步

?

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

?

4) Windows会提示密码,继续即可

?

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

?

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

?

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

[[email protected] ~]# cd ; umask 077; mkdir -p .ssh ;cd .ssh
[[email protected] .ssh]# vim authorized_keys  #添加windows公钥

2.跳板机下发公钥至后端主机

1) 在跳板机上生成秘钥对

[[email protected] ~]# ssh-keygen -t rsa -C [email protected]

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

[[email protected] ~]# ssh-copy-id  -i /root/.ssh/id_rsa.pub -p22 [email protected]
[[email protected] ~]# ssh-copy-id  -i /root/.ssh/id_rsa.pub -p22 [email protected]
[[email protected] ~]# ssh-copy-id  -i /root/.ssh/id_rsa.pub -p22 [email protected]

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

[[email protected] ~]# ssh [email protected]
[[email protected] ~]# exit

[[email protected] ~]# ssh [email protected]
[[email protected] ~]# exit

3.通过跳板机能实现scp拷贝文件免密码

[[email protected] ~]# scp zls.txt [email protected]:/tmp
zls.txt                 100%    0     0.0KB/s   00:00
[[email protected] ~]# scp zls.txt [email protected]:/tmp
zls.txt                 100%    0     0.0KB/s   00:00  

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

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

for i in 31 41 7
do
    echo "#########172.16.1.$i#####"
    ssh [email protected]$i "$1"
done
[[email protected] ~]# sh  all.sh  "free -m"      (执行free -m 命令)

5.脚本实现(跳板机)

#!/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 [email protected]$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

2.简单的脚本测试

#!/bin/bash
read -p "请输入ip地址或者主机名" name
case "$name" in
41|backup)
        ssh 172.16.1.41;;
31|nfs)
        ssh 172.16.1.32;;
7|web01)
        ssh 172.16.1.7;;
*)
        echo "input error"
esac

8.SH安全优化

SSH作为远程连接服务,通常我们需要考虑到该服务的安全,所以需要对该服务进行安全方面的配置。1.更改远程连接登陆的端口2.禁止ROOT管理员直接登录3.密码认证方式改为密钥认证4.重要服务不使用公网IP地址5.使用防火墙限制来源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###

2.重启sshd服务

[[email protected] ~]# systemctl restart sshd

3.复制一个‘m01-副本’ 回话,会显示拒绝登陆

4.回到m01,建立普通用户,并重新生成密钥文件

[[email protected] ~]# useradd gjy

5.切换到普通用户,编辑密钥文件,重启服务

[[email protected] ~]# su - gjy
[[email protected] ~]$  ssh-keygen
[[email protected] ~]$ vim ~/.ssh/authorized_keys
[[email protected] .ssh]$ chmod 600 authorized_keys
[[email protected] .ssh]$ systemctl restart sshd

6.xshell m01 副本会话

7.修改好即可登陆

9.交互expect[扩展]

1.安装expect

[[email protected] ~]# yum install -y expect

2.编写expect脚本

#!/usr/bin/expect
set ip 10.0.0.51
set pass 123456
set timeout 30
spawn ssh [email protected]$ip
expect {
        "(yes/no)" {send "yes\r"; exp_continue}
        "password:" {send "$pass\r"}
}
expect "[email protected]*"  {send "df -h\r"}
expect "[email protected]*"  {send "exit\r"}
expect eof

10.免交互sshpass[扩展]

1.安装sshpass

[[email protected] ~]# yum install -y sshpass

2.使用sshpass命令

[[email protected] ~]# sshpass -p 123456 ssh [email protected]

[option]
-p:指定密码
-f:从文件中取密码
-e:从环境变量中取密码
-P:设置密码提示

原文地址:https://www.cnblogs.com/gongjingyun123--/p/11324660.html

时间: 2024-08-03 23:49:18

SSH远程管理服务实战的相关文章

6. SSH远程管理服务实战

1. SSH基本概念? ssh是一个应用层安全协议 2.SSH主要的功能是? 实现远程登录, 数据传输过程中进行加密. 钉钉(澡堂模式) 远程登录: ssh telnet 3.SSH与Telnet之间有什么区别? 服务连接方式 服务数据传输 服务监听端口 服务登陆用户 ssh 加密 22/tcp 默认支持root用户登陆 telnet 明文 23/tcp 不支持root用户登陆 4.抓包分析SSH与Telnet的区别? 所需工具:Wireshark [[email protected] ~]#

SSH远程管理服务

作者:Georgekai 归档:学习笔记 2018/1/29 SSH远程管理服务 1.1 SSH服务介绍说明 Secure shell protocol--安全的shell协议 SSH:先对要传输的数据包进行加密处理,然后在进行数据传输,确保了数据的安全 telnet:用于远程连接控制,但不对数据传输进行加密 1.1.1 SSH服务主要提供的两个功能: 1. 远程连接 2. 远程文件传输:如sftp 1.1.2 SSH连接排错思路 1. ping 172.16.1.41 traceroute 1

Linux(11):期中架构(3)--- SSH远程管理服务 &amp; ansible 批量管理服务

SSH远程管理服务 1. 远程管理服务知识介绍 # 1.1 SSH远程登录服务介绍说明 SSH是Secure Shell Protocol的简写,由 IETF 网络工作小组(Network Working Group)制定: 在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密处理,加密后在进行数据传输.确保了传递的数据安全. SSH是专为远程登录会话和其他网络服务提供的安全性协议. 利用SSH协议可以有效的防止远程管理过程中的信息泄露问题,在当前的生产环境运维工作中, 绝大多数企业普遍

ssh远程管理服务配置

##sshd远程连接的优化 版主QQ:2559721591    资料网站:http://rshare.ys168.com 网络环境: ssh服务器(虚拟机):192.168.10.25 ssh客户机(物理机):192.168.10.1 ssh:是安全的外壳的缩写(Secure Shell).是专门为远程登录会话和其他网络服务提供安全性的协议. linux的ssh远程登录软件:openssh,默认端口是22. 显示远程连接过程:ssh  -v  [email protected] #软件安装 y

linux运维、架构之路-SSH远程管理服务

1.SSH服务功能介绍 1.远程登录管理 提供类似telnet远程联机服务器的服务,即上面提到的SSH服务: 2.远程传输文件 是类似FTP服务的sftp-server,借助SSH协议来传输数据的,提供更安全的SFTP服务(vsftp,proftp) 3.ssh服务连接工具 CRT.xshell.vnc支持远程连接图形化界面.xmanger支持远程连接图形化界面(配置简单) 2.SSH远程服务特点 1.ssh服务端口信息为22 2.ssh采用密文方式传输数据 3.ssh服务默认支持root用户进

SSH远程管理、参数讲解、xshell使用、scp,sftp,ssh命令(ssh两种方式的密钥验证方

1.SSH远程管理 SSH(Secure Sheel)是一种安全通道协议,主要用于实现字符界面的远程登录.远程复制等功能.SSH协议对通信双方的数据传输进行了加密处理,其中包括用户的口令.与早期的TELNET(远程登录,tcp23端口).RSH(Remote Sheel,远程执行命令).RCP(Remote File Copy,远程文件复制)等应用想必,SSH协议提供了更好的安全性. 配置OpenSSH服务端(由openssh.openssh-server软件包提供.主配置文件/etc/ssh/

Linux服务器ssh远程管理

SSH远程管理 SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登陆,远程复制等功能.SSH协议对通信双方的数据传输进行了加密处理,其中包括用户登陆时输入的用户口令,与早期的telnet(远程管理),rsh(Remote Shell ,远程执行命令),rcp(远程复制文件)等应用相比,SSH协议提供了更好的安全性. 配置OpenSSH服务端 在RHEL 5系统中,OpenSSH服务器由openssh,openssh-server等软件包提供(默认已安装),并已将s

Linux SSH远程管理故障如何排查?

Linux SSH远程管理故障如何排查? SSH远程管理故障排查方案: 1.检测两个机器是否畅通 两个机器之间是否畅通,查看物理链路是否有问题(网线网卡.IP是否正确) 第1步:物理链路是否畅通,比喻为"高速公路是否畅通" ping 排查客户端到服务端的线路问题,ping是常用的网络连通性检查工具 tracert -d 路由追踪命令,-d是不进行反向解析 C:\Users\Administrator>ping 10.0.0.8 正在Ping 10.0.0.8 具有32 字节的数据

Linux SSH端口更改和SSH远程连接服务慢原因排查

Linux SSH端口更改和优化 为什么需要更改SSH默认连接端口 Windows服务器的默认远程管理端口是3389,Linux服务器的默认端口是22.如果在公网上,经常会被工具扫,这是不安全的,为了系统安全,需要更改默认的配置. Linux 6 操作过程 更改配置文件 # cp /etc/ssh/sshd_config /etc/ssh/sshd_config.ori 更改配置前备份 # vi /etc/ssh/sshd_config 编辑sshd_config ####添加如下内容####