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的流量
3.telnet无法使用root用户登录Linux系统,需要创建普通用户
# 创建用户
[root@web01 ~]# useradd hg
# 设置密码
[root@web01 ~]# echo '1' | passwd --stdin hg
4.使用普通用户进行telnet登录
5.搜索wireshark包含telnet的相关数据
6.SSH数据加密传输
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.基于秘钥远程登录
#### 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-->选择工具->新建密钥生成工具
- 生成公钥对,选择下一步
- 填写秘钥名称。秘钥增加密码则不建议配置
- Windows会提示密码,继续
- 生成秘钥后,点击Xshell->工具->用户秘钥管理者->选择对应秘钥的属性
- 选择对应秘钥的公钥,复制
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
Comments | NOTHING