SSH
- 一、SSH概述
- 1.1 定义
- 1.2 SSH的优点
- 1.3 OpenSSH
- 1.3.1 定义
- 1.3.2 SSH服务器-----sshd
- 二、SSH原理
- 三、SSH登录方式
- 3.1 方式一
- 3.2 方式二
- 3.3 方式三:跳板连接
- 3.3.1 跳板连接概述
- 3.3.2 具体配置
- 3.4 方式四:远程控制
- 四、服务端配置
- 4.1 系统安全架构-----修改ssh默认端口号
- 五、免密码登录
- 1)在客户端生成密钥文件
- 2)将公钥复制到SSH服务器上
- 3)通过SSH连接尝试登录到服务器
一、SSH概述
1.1 定义
SSH(Secure Shell)协议是一种用于远程登录和安全传输文件的网络协议。
使用SSH协议,用户可以远程登录到远程主机并执行命令,或者通过安全的文件传输协议在本地计算机和远程主机之间传输文件。
SSH客户端<--------------网络---------------->SSH服务端
1.2 SSH的优点
-
安全性: 数据传输是加密的,可以防止信息泄漏。
-
身份验证:防止未经授权的用户访问远程系统。
-
远程管理:可通过SSH协议登录远程服务器并执行命令,无需直接物理访问设备。
-
端口转发:SSH支持 端口转发功能,可以安全地传输其他协议和应用程序。
-
传输速度: 数据传输是压缩的,可以提高传输速度。
SSH具有强大的安全性、身份验证和远程管理功能,使得它成为远程访问和管理计算机系统的首选协议。
1.3 OpenSSH
1.3.1 定义
OpenSSH是通过SSH协议实现的一套用于远程登录和文件传输的工具,包括SSH客户端(SSH)和SSH服务器(sshd)。
Centos 7系统默认已安装openssh相关软件包,并将sshd 服务添加为开机自启动。
1.3.2 SSH服务器-----sshd
#重要内容#
##名称##
服务名称:sshd
##主程序##
服务端主程序:/usr/sbin/sshd
##配置文件##
服务端配置文件:/etc/ssh/sshd_config
#设置与服务端相关的应用可通过服务器端配置文件实现
客户端配置文件:/etc/ssh/ssh_config
#设置与客户端相关的应用可通过客户端配置文件实现
sshd 服务默认使用的是TCP的22端口,安全协议版本sshv2,出来2之外还有1(有漏洞)
ftp 服务默认使用的是TCP的20 21
#sshd在使用ECDSA算法时生成的公钥文件
ssh_host_ecdsa_key.pub
#ecdsa 代表加密算法
#pub 代表公钥
二、SSH原理
+-------------------+ +-------------------+
| 客户端 | | 服务端 |
+-------------------+ +-------------------+
| |
| 生成密钥对 |
|-------------------------------------->|
| 交换公钥 |
|<--------------------------------------|
| |
| 加密数据 |
|-------------------------------------->|
| |
| |
| 解密数据 |
|<--------------------------------------|
| |
- 客户端向服务端发起连接请求;
- 服务端收到请求后,将会话id和服务端的公钥交给客户端;
- 客户端接收后,将会话id和客户端的公钥进行异或运算得到回复信息Res(Res=会话id^客户端公钥);
- 客户端再将Res用服务端的公钥加密,得到密文U(U=Res+服务端的公钥id),并将密文U交给服务端;
- 服务端用服务端私钥将密文U解密,得到回复信息Res;
- 服务端将Res和会话id进行异或运算,得到客户端的公钥;
- 双方各自持有三个秘钥,分别为自己的一对公、私钥,以及对方的公钥,之后的所有通讯都会被加密。
三、SSH登录方式
3.1 方式一
ssh [远程主机用户名]@[远程服务器主机名或IP地址] -p port
#用户为root时可不写主机名
#不加-p 选项 默认使用22端口
-p 指定登录端口(当服务端的端口非默认时,需要使用-p 指定端口进行登录)
ssh 192.168.2.102
3.2 方式二
ssh -l [远程主机用户名] [远程服务器主机名或IP 地址] -p port
-l 选项,指定登录名称
3.3 方式三:跳板连接
3.3.1 跳板连接概述
跳板连接用于在不直接暴露目标主机的情况下进行安全访问。
通过跳板连接,用户可以首先连接到中间设备,然后再通过中间设备连接到目标主机。
中间设备不一定是跳板机,只需要安装ssh服务就可以。
应用场景
-
远程服务器管理:跳板连接常用于管理和控制远程服务器。通过跳板机,可以安全地登录和执行命令,而无需直接暴露目标服务器的访问端口。
-
内部网络隔离:跳板连接可用于将外部网络和内部网络隔离,提供一个安全的访问通道,外部用户必须通过身份验证和授权才能访问内部网络资源。
-
多层级安全访问:通过跳板机,可以从一个层级跳转到另一个层级,确保访问的安全性和可管理性。
-
SSH端口转发:跳板连接还可以用于SSH端口转发,提供访问内部受限资源的能力。
3.3.2 具体配置
#本机地址为192.168.2.74
iptables -A INPUT -s 192.168.2.100 -j REJECT #拒绝来自此IP的所有访问
#方式一#
ssh -t IP1 ssh -t IP2.... ssh -t 目标IP
# IP1和IP2为跳板机的IP地址,先跳转到IP1,再跳转到IP2
#两次跳转成功后,才能远程连接到目标设备
#举例#
ssh -t 192.168.2.102 ssh -t 192.168.2.103 ssh -t 192.168.2.74
#跳转两次,从当前设备远程连接IP地址为192.168.2.74的主机或者服务器
#方式二
ssh -J IP1,IP2... 目标IP
#IP1 IP2为中间设备的IP地址
#举例
ssh -J 192.168.2.102,192.168.2.103 192.168.2.74
3.4 方式四:远程控制
ssh 目标设备的IP地址 命令
#远程控制目标主机使用命令 并将命令执行结果返回本机
#主机B的IP地址为192.168.2.102
[root@A ~] ssh 192.168.2.102 ls #查看主机B家目录下有哪些目录或文件
四、服务端配置
通过修改服务端配置文件/etc/ssh/sshd_config
来实现不同的功能。
vim /etc/ssh/sshd_config #编辑配置文件
4.1 系统安全架构-----修改ssh默认端口号
vim /etc/ssh/sshd_config #编辑配置文件
...
Port 233 #修改端口号
...
#当前设备和目标设备的端口号都要修改
systemctl restart sshd #重启服务使生效
#修改后 远程连接需要加 -p选项
ssh 192.168.2.102 -p 9527
五、免密码登录
原理
使用公钥加密技术。
在SSH免密登录过程中,客户端和服务器之间通过密钥对进行身份验证,而不是使用传统的密码验证方式。
SSH会自动使用密钥对进行验证,而无需输入密码。
思路
主机A为客户端 IP地址为192.168.2.100
主机B为服务端 IP地址为191.168.2.102
使主机A通过ssh远程连接主机B不需要密码
1)在客户端生成密钥文件
ssh-keygen #生成密钥文件
-t #指定加密方式
#不加此选项,默认使用rsa方式
...
Enter file in which to save the key(/root/.ssh/id_rsa): 直接回车
#选择密钥文件存放的位置 (默认路径)
Enter passphrase (empty for no passphrase):
#对密钥文件进行加密,设置密码后,访问文件需要输入密码
#一般不输入密码 直接回车
Enter same passphrase again:
最后会生成两个文件
cd /root/.ssh
ls
.pub为密钥文件
2)将公钥复制到SSH服务器上
ssh-copy-id -i 公钥文件 [用户名]@IP地址
#将密钥文件传过去
#下次就可以免密登录
#以root用户登录时 可省略
ssh-copy-id -i id_rsa.pub 192.168.2.102
#复制公钥文件