【笔记】SSH服务:基本概述、相关命令“ssh、scp、sftp”、验证方式、场景实践、安全优化

SSH服务

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@m01 ~]# yum install telnet-server -y
[root@m01 ~]# systemctl start telnet.socket
2.使用wireshark检测vmnet8网卡上telnet的流量

在这里插入图片描述

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

[root@nfs ~]# useradd ahui
[root@nfs ~]# echo "1"| passwd --stdin ahui

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

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

6.使用wireshark分析ssh流量

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

SSH相关命令

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

ssh远程登录服务器命令示例

ssh -p22 root@10.0.0.61

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

windows连接Linux服务器
   xshell    工具
   crt       工具
1)直接连接 默认是22端口 会弹出xshell的输入用户名和密码对话框

ssh 10.0.0.7		

2)指定用户连接 指定用户名方式远程连接

ssh root@10.0.0.31		

3)指定端口连接

ssh root@10.0.0.31 2222

Linux连接Linux服务器
1)默认远程连接
端口默认22
用户默认以当前登陆的系统用户为远程连接用户
如果当前nfs登陆是root 则 以验证10.0.0.7的root用户身份密码

[root@nfs ~]# ssh 10.0.0.7

2)指定用户名连接

[root@nfs ~]# ssh root@10.0.0.7

3)指定端口远程连接 -p2222

[root@web01 ~]# ssh -p2222 root@10.0.0.31

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

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

scp远程拷贝类似rsync
rsync  增量备份 推送目录加/ 表示目录下面的内容 不加/ 表示目录本身
scp    全量备份 加/和不加/ 都表示目录本身

1)将31的hosts拷贝到7的/root目录下 推送数据
默认以当前登陆系统用户作为远程验证用户
命令 源文件 目标地址

[root@nfs ~]# scp /etc/hosts 10.0.0.7:/root/
root@10.0.0.7's password: 
hosts                                                   100%  158   179.9KB/s   00:00 

推送多个文件

[root@nfs ~]# scp /etc/hosts /etc/passwd 10.0.0.7:/root/

推送ahui目录下所有的文件

[root@nfs ~]# scp /ahui/* 10.0.0.7:/root/

2)将7的/root目录下的hosts文件下载到本地的/opt目录下 下载数据

[root@nfs ~]# scp 10.0.0.7:/root/hosts /opt/
root@10.0.0.7's password: 
hosts                                                   100%  158   170.3KB/s   00:00 

3)推送或者下载文件不需要使用参数 直接使用scp
推送目录使用-r参数

[root@nfs ~]# scp -r ahui/ 10.0.0.7:/root
root@10.0.0.7's password: 
1.txt                                                   100%    2     1.7KB/s   00:00    
[root@nfs ~]# 

注意: 如果目录下多个小文件 建议先打包在scp

[root@nfs ~]# tar zcvf ahui.tar.gz ahui
[root@nfs ~]# ll
total 48
drwxr-xr-x 2 root root 24576 Jun 13 10:05 ahui
-rw-r--r-- 1 root root  7322 Jun 13 10:05 ahui.tar.gz
[root@nfs ~]# scp ahui.tar.gz 10.0.0.7:/root
root@10.0.0.7's password: 
ahui.tar.gz                                           100% 7322     4.8MB/s   00:00   

拷贝单个文件使用scp命令

scp  /etc/hosts  10.0.0.7:/opt/
rsync -avz /etc/hosts 10.0.0.7:/opt/

使用scp指定端口传输-P2222

[root@web01 ~]# scp -P2222 /etc/hosts 10.0.0.31:/root
root@10.0.0.31's password: 
hosts                                                   100%  158     1.4KB/s   

示例:

#推:将本地/tmp/ahui推送至远端服务器10.0.0.61的/tmp目录,使用对端的root用户
[root@m01 ~]# scp -P22 -rp /tmp/ahui ahui@10.0.0.61:/tmp

#拉:将远程10.0.0.61服务器/tmp/ahui文件拉取到本地/opt/目录下
[root@m01 ~]# scp -P22 -rp root@10.0.0.61:/tmp/ahui /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 

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

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/

SSH验证方式

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

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

➜  ~ ssh -p22 root@10.0.0.61
root@10.0.0.61 password:
[root@m01 ~]#

2.基于秘钥远程登录

默认情况下,通过ssh客户端命令登陆远程服务器,需要提供远程系统上的帐号与密码,但为了降低密码泄露的机率和提高登陆的方便性,建议使用密钥验证方式。
在这里插入图片描述
1).在服务器上生成非对称密钥,使用-t指定密钥类型, 使用-C添加描述

[root@m01 ~]# ssh-keygen -t rsa -C xxxx
...
#默认一路回车即可
...


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 ~]#

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

[root@m01 ~]# ssh root@172.16.1.41 "hostname -i"
172.16.1.41

SSH场景实践

在这里插入图片描述

windows免密链接linux

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

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

在这里插入图片描述

2)生成公钥对,选择下一步
在这里插入图片描述

3)填写秘钥名称。秘钥增加密码则不建议配置
在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

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

2.在windwos测试前: 修改跳板机的SSH服务配置

[root@m01 ~]# vim /etc/ssh/sshd_config
PermitRootLogin no			# 关闭root登陆
...
PasswordAuthentication no   # 关闭密码验证仅秘钥登录
...

3.将密钥对中的公钥(锁)复制到跳板机
-----------------------------------------------手动创建方式---------------------------------
1)通过ahui用户远程登陆到系统中
2)在家目录创建.ssh隐藏目录 mkdir /root/.ssh

[ahui@m01 ~]$ chmod 700 .ssh
[ahui@m01 ~]$ ll -d .ssh
drwx------ 2 ahui ahui 29 Jun 13 11:35 .ssh

3)编辑.ssh下的认证文件/home/ahui/.ssh/authorized_keys
将windows的公钥复制到这个文件
4)修改权限为600

[ahui@m01 ~]$chmod 600 .ssh/authorized_keys

5)测试windows连接150是否能正常连接
1.检查秘钥是否正确
2.ssh/authorized_keys 这个验证文件名称必须正确的
3.检查文件权限是否600
4.检查目录的权限700
5.检查/root目录的权限为550 属主属组root

-------------------------------------------------手动创建方式-------------------------------

比较简单的方式将windows的公钥 放到10.0.0.150的ahui普通用户的严重文件中

[ahui@m01 ~]$ ssh-keygen    # 生成密钥对 会自动创建.ssh 并且权限是700

将公钥复制到认证文件

[ahui@m01 ~]$ vim .ssh/authorized_keys

修改文件权限为600

[ahui@m01 ~]$ chmod 600 .ssh/authorized_keys

Linux通过秘钥连接Linux服务器

10.0.0.150远程连接10.0.0.7

第一步: 10.0.0.150 需要生成秘钥对 创建一把锁和钥匙

  [root@m01 ~]# ssh-keygen -t rsa -C 593528156   # 一路回车
  ........
  [root@m01 ~]# ssh-keygen   					# 可以省略 -t 和-C参数 直接一路回车

在家目录的.ssh隐藏目录下生成了密钥对

[root@m01 ~]# ll .ssh/
total 12
-rw------- 1 root root 1679 Jun 13 10:32 id_rsa				 #私钥
-rw-r--r-- 1 root root  391 Jun 13 10:32 id_rsa.pub			 #公钥

第二步: 将公钥发送到10.0.0.7服务器
通过命令将公钥拷贝到10.0.0.7 输入root的密码

[root@m01 ~]# ssh-copy-id -i .ssh/id_rsa.pub 10.0.0.7

在服务端查看:

[root@web01 ~]# ll .ssh/
total 8
-rw------- 1 root root 391 Jun 13 10:35 authorized_keys
-rw-r--r-- 1 root root 178 Jun 13 09:37 known_hosts
[root@web01 ~]# cat .ssh/authorized_keys 
ssh-rsa ....

第二种方案: 复制公钥文件中的内容 到10.0.0.7的认证文件中
认证文件默认没有 需要手动创建

[root@web01 ~]#vim /root/.ssh/authorized_keys
ssh-rsa ....

[root@web01 ~]# ll .ssh/
total 8
-rw------- 1 root root 391 Jun 13 10:35 authorized_keys

第三步: 远程登陆测试 不需要输入用户名和密码 免密连接

[root@m01 ~]# ssh 10.0.0.7
Last login: Mon Jun 13 09:36:06 2022 from 10.0.0.150
[root@web01 ~]# 

跳板机将公钥分发到后端内网主机:

第一种方案:

[ahui@m01 ~]$ ssh-keygen   # 生成密钥对
[ahui@m01 ~]$ ssh-copy-id -i .ssh/id_rsa.pub root@172.16.1.7

远程连接: 只能在ahui用户下 远程面面连接 172.16.1.7

[ahui@m01 ~]$ ssh root@172.16.1.7
Last login: Mon Jun 13 10:46:35 2022 from 10.0.0.150
[root@web01 ~]# 

第二种方案: 通过root用户跳转到后端内网主机

[ahui@m01 ~]$ su - root		# 提权切换到root用户 root密码 
Password: 
Last login: Mon Jun 13 12:01:36 CST 2022 on pts/2

生成密钥对:

[root@m01 ~]# ssh-keygen   # 一路回车 如果有会提示是否覆盖

下发秘钥到172.16.1.7和200的root用户下

[root@m01 ~]# ssh-copy-id -i .ssh/id_rsa.pub 172.16.1.7
[root@m01 ~]# ssh-copy-id -i .ssh/id_rsa.pub 172.16.1.200

测试远程连接: 150连接172.16.1.7

[root@m01 ~]# ssh 172.16.1.7
Last login: Mon Jun 13 12:11:26 2022 from 172.16.1.150
[root@web01 ~]# 

[root@m01 ~]# ssh 172.16.1.200
Last login: Mon Jun 13 12:06:20 2022 from 172.16.1.31

SSH安全优化

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###

免交互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
免交互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:设置密码提示

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值