ssh基本概述

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

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

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

区别:

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

使用抓包工具(wireshark)验证telnet明文传输与ssh加密传输

1.安装telnet服务并运行

# 安装服务
[root@web01 ~]# yum install telnet-server -y
# 启动服务
[root@web01 ~]# systemctl start telnet.socket

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

img

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

# 创建用户
[root@web01 ~]# useradd hg

# 设置密码
[root@web01 ~]# echo '1' | passwd --stdin hg

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

img

img

img

5.搜索wireshark包含telnet的相关数据

img

img

6.SSH数据加密传输

img

img

ssh相关命令和选项

ssh

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

ssh 远程连接linux服务器
       -p port 指定端口
       ssh -p8080 root@10.0.0.8

ssh 远程连接linux 直接执行命令
       ssh root@10.0.0.8 'cat /etc/passwd'

scp

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

# 推
scp -p ffdd xxx@10.0.0.8:/tmp/

# 拉
scp root@10.0.0.8:/tmp/ffdd ~

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

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

ssh验证方式

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

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

[root@web01 ~]# ssh -p22 root@10.0.0.8
root@10.0.0.8 password:
[root@web02 ~]# 

2.基于秘钥远程登录

img

#### ssh-keygen:生成密钥对
[root@m01 ~]# ssh-keygen
Generating public/private rsa key pair.
## 将秘钥保存到文件中,可以指定其他路径(直接回车 不指定会在 ~ 下)
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
## 给密钥对设置密码,不需要设置(直接回车)
Enter passphrase (empty for no passphrase):
## 重复输入设置的密码(直接回车)
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:Pbmi+BXD4/5J7vVWR9/2JQFSxOLoumALYOoNDVfjSGw root@m01
The key's randomart image is:
+---[RSA 2048]----+
|           +o    |
|  .       o o    |
|   E o   o o .   |
|  o + ......  . .|
|.o o . .S +    oo|
|o.+    ..+ o  . B|
|....o  .+ o .  ++|
|. oo +.+ + o .. .|
| . .o.+..o=  ..  |
+----[SHA256]-----+

## 生成后的密钥对
[root@m01 ~]# ll /root/.ssh
-rw------- 1 root root 1679 May 24 15:29 id_rsa
-rw-r--r-- 1 root root  390 May 24 15:29 id_rsa.pub

#### ssh-copy-id:发送公钥
-i:指定公钥位置
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.7
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.8
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.31
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.41

#### .ssh目录中的know_host文件的作用
## 记录连接过的服务器,如果没有连接过(第一次连接),需要输入yes 
[root@m01 ~]# cat ~/.ssh/known_hosts
172.16.1.7 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJDdMxQuNvVwWzXL/aE0QJn2Ta/tB9LL0cfLlJ2BmxsOadEbCzAGE76aDmWjyrUfMQ1GpbcykBi14XYP7b/3cY8=
172.16.1.8 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJDdMxQuNvVwWzXL/aE0QJn2Ta/tB9LL0cfLlJ2BmxsOadEbCzAGE76aDmWjyrUfMQ1GpbcykBi14XYP7b/3cY8=
172.16.1.31 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJDdMxQuNvVwWzXL/aE0QJn2Ta/tB9LL0cfLlJ2BmxsOadEbCzAGE76aDmWjyrUfMQ1GpbcykBi14XYP7b/3cY8=
172.16.1.41 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJDdMxQuNvVwWzXL/aE0QJn2Ta/tB9LL0cfLlJ2BmxsOadEbCzAGE76aDmWjyrUfMQ1GpbcykBi14XYP7b/3cY8=

#### 输入生成密钥对指令 ssh-keygen 时 这条指令做了以下操作↓
1.在当前用户的家目录下创建了一个隐藏目录 .ssh mkdir ~/.ssh
2.将密钥对存放目录 .ssh 授权为 700      chmod 700 ~/.ssh
3.将公钥内容写入 ~/.ssh/id_rsa.pub 文件中
4.将私钥内容写入 ~/.ssh/id_rsa 文件中
5.将私钥文件授权为 600                 chmod 600 ~/.ssh/id_rsa

#### 输入发送公钥指令 ssh-copy-id 时 这条指令做了以下操作↓
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.7
第一次连接时这台服务器时需要输入yes
输入密码:1
1.在远端的指定用户的家目录下创建了一个隐藏目录.ssh  
# 相当于 ssh root@172.16.1.7 'mkdir ~/.ssh'

2.将密钥对存放目录 .ssh 授权为 700                
# 相当于 ssh root@172.16.1.7 'chmod 700 ~/.ssh'

3.先在远端~/.ssh目录下创建文件authorized_keys     
# 相当于 ssh root@172.16.1.7 'touch~/.ssh/authorized_keys'

4.将authorized_keys文件授权为600                  
# 相当于 ssh root@172.16.1.7 'chmod 600 ~/.ssh/authorized_keys'

[root@web01 ~]# cat .ssh/authorized_keys 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC0PttX7Y8vjDBqQJ0M64jFSVVGRlfkRkAews6yZbgde/o1liVTFUy+s67vibY6pY6gauag2/HfUpzE8l5BDdpx8FrvIfgIeTPS/4WCiy+kwOxnJuTVOP/aKEkKcgUHw2sWEfEbCForQdnTVOh/HiVIghop/G+00Gedky0UKuM+xaDqfWGv9ya7j5b6eyVMyizdKAL9RPeD2CbpPgz6vA3ZGuFu/hKJ4yCOMB8YZQfcHqdCM1NNGrsgkZMyy9AD6Z5thl9GXyUIAJ93dAXA4F84gFTIKKB+SF6jJteBSBmq/PzaRgJWQCNISFE0/CHiPSkL76unVsqHV0XcXWZaja0j root@m01
# 相当于 ssh root@172.16.1.5 'echo ssh-rsa >> ~/.ssh/authorized_keys'  这里的内容是追加进去的
## 注:公钥不能折行 一定要是一行内容 可以使用 set nu 查看行号

使用Xshell生成密钥对

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

img

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

img

img

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

img

  • Windows会提示密码,继续

img

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

img

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

img

SSH安全优化

方法一:
## 到ssh配置文件 修改以下内容
[root@m01 ~]# vim /etc/ssh/sshd_config
安全相关:
17 Port 456                   # 修改默认端口
115 UseDNS no                 # 关闭反向解析
38 PermitRootLogin no         # 禁止root用户登录
效率相关:
65 PasswordAuthentication no  # 禁止使用密码登录
79 GSSAPIAuthentication no    # 关闭GSSAPI认证

方法二:
## 将以下内容,直接复制到文件最后一行
Port 456                   # 变更SSH服务远程连接端口
PermitRootLogin no         # 禁止root用户直接远程登录
PasswordAuthentication no  # 禁止使用密码直接远程登录
UseDNS no                  # 禁止ssh进行dns反向解析,影响ssh连接效率参数
GSSAPIAuthentication no    # 禁止GSS认证,减少连接时产生的延迟

## 重启服务
[root@m01 ~]# systemctl restart sshd

## 此时如果断开服务器 会导致无法连接
## 解决方案
如果已经优化完ssh,发现服务器上出现以下问题:
# 1.没有普通用户
  useradd wyk(如果无法创建,进入单用户模式)
# 2.windows上秘钥没有推送
    1.在windows上生成密钥对
      - 使用windows的命令行执行 ssh-keygen
    2.使用Xshell生成密钥对↓

免交互生成密钥对

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa &>/dev/null
-t:指定加密类型
-P:空密码
-f:秘钥生成的位置

免交互推送公钥

ssh-copy-id -i ~/.ssh/id_rsa.pub root@ip