什么是协议? 顾名思义,是双方通信时定下的一种规则,需要通信双方同时遵守才有效果。
协议有很多种,不同的协议对应适用于不同的开发场景。例如,
- 网络协议:TCP/IP协议、UDP协议、HTTP协议、FTP协议、Telnet协议、SMTP协议、NFS协议等。
- 硬件协议:USART、UART、RS232、RS485/RS422、I2C、SPI、ADC、CAN、ModBus等。
这里介绍ssh协议和外部终端(连接Ubuntu):
ssh协议
SSH 协议: SSH(Secure Shell) 是一种用于在不安全网络中进行安全通信的协议,主要用于远程登录和命令执行。SSH 提供了强大的加密机制,能够确保通信的机密性、完整性和身份认证。SSH 协议是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。 利用SSH 协议可以有效防止远程管理过程中的信息泄露问题。 SSH 建立在可靠的传输协议TCP 之上。
其主要用途:
- 远程登录:通过 SSH 连接到远程服务器,执行命令或管理系统。
- 数据传输:使用
scp
或sftp
等工具通过 SSH 传输文件。 - 隧道转发:SSH 支持端口转发,用于加密其他协议的流量(如 HTTP、数据库连接等)。
- 配置管理:通过 SSH 批量管理远程主机。
简单点说,外部设备通信协议:允许某个设备 远程通过网络访问另外一个设备。
SSH 协议的工作原理
SSH 协议基于 客户端-服务器模型,主要步骤为如下几个步骤:
- 建立连接:
客户端(如 ssh 命令)向服务器(运行 sshd 服务)发起连接。
默认端口为 22,但也可以通过配置文件更改。
- 身份认证:
SSH 提供以下几种身份认证方式:
- 密码认证:
- 客户端输入用户密码进行验证(默认方式)。
- 密钥认证:
- 使用公钥-私钥对进行认证:
- 客户端持有私钥,服务器保存公钥。
- 客户端通过私钥签名,服务器验证签名是否匹配公钥。
- 优点:更安全,支持无密码登录。
- 示例:生成密钥
- 使用公钥-私钥对进行认证:
ssh-keygen -t rsa
ssh-copy-id user@remote_host
- 基于证书的认证:
- 使用证书机构(CA)签发的证书进行认证。
- 双因子认证:
- 除密码或密钥外,还需支持 TOTP(如 Google Authenticator)。
- 数据加密:
SSH 使用对称加密(如 AES、ChaCha20)加密通信内容。
会话密钥通过非对称加密(如 RSA、ECDSA)安全交换。 - 数据完整性校验:
SSH 使用消息认证码 (MAC) 确保通信数据未被篡改。
SSH协议的主要组件
1. 客户端工具
SSH 协议需要客户端工具来发起连接,常见的工具包括:
- OpenSSH:Linux 和 macOS 默认的 SSH 客户端。
- PuTTY:Windows 上广泛使用的 SSH 客户端。
- MobaXterm:集成了 SSH、SFTP 等功能的终端工具。
2. SSH 服务端
- 远程主机需要运行 SSH 服务端程序(如
OpenSSH
的sshd
)。 - 服务端负责监听 SSH 连接请求,进行认证和数据处理。
3. 配置文件
- 客户端配置文件:
~/.ssh/config
- 用于配置常用的 SSH 连接参数。
- 代码/配置文件:
Host remote_serverHostName 192.168.1.100User rootPort 2222IdentityFile ~/.ssh/id_rsa
- 服务端配置文件:
/etc/ssh/sshd_config
- 用于配置 SSH 服务端的行为(如认证方式、端口、加密算法)。
- 代码/配置文件:
Port 22
PermitRootLogin no
PasswordAuthentication yes
PubkeyAuthentication yes
外部终端与 SSH 的关系
外部终端是 SSH 的重要组成部分,用于提供用户与远程系统的交互界面。以下是外部终端的相关内容:
- 什么是外部终端?
- 外部终端是指运行在用户设备上的终端工具,可以通过 SSH 协议连接到远程主机。
- 它们支持发送命令到远程系统,并接收并显示返回的结果。
- 一些常见外部终端工具
- Linux/macOS 终端:
- 默认提供 ssh 命令。代码:
ssh user@remote_host
- PuTTY:
- Windows 上的轻量级 SSH 客户端工具。
- 支持 SSH、Telnet、串口等多种协议。
- MobaXterm:
- 高级终端工具,支持多标签、SFTP 文件管理。
- 集成了 X11 转发功能,方便图形界面程序的远程操作。
- Termius:
- 跨平台的 SSH 客户端,支持密钥管理和组管理。
- VS Code Remote - SSH 插件:
- 可通过 SSH 连接远程主机,并直接编辑远程文件。
- 外部终端的功能
- 命令行交互:允许用户直接输入远程主机的命令。
- 文件传输:部分外部终端(如 MobaXterm、VS Code)支持内置文件管理。
- 多会话支持:支持同时管理多个 SSH 会话。
- 端口转发:支持 SSH 隧道,以便访问远程主机的服务。
SSH 和外部终端的实际应用
- 远程登录:最常见的用途是远程登录到服务器进行管理或开发。
ssh user@remote_host
- 文件传输:使用外部工具通过 SSH 进行文件传输:
- scp(安全复制)
scp local_file user@remote_host:/path/to/remote_dir
- sftp(SSH 文件传输协议)
sftp user@remote_host
put local_file
get remote_file
- SSH 隧道(端口转发):SSH 支持端口转发功能,用于加密其他协议的流量。
- 本地端口转发
将本地端口流量转发到远程主机。
代码:
ssh -L 8000:localhost:80 user@remote_host
访问 http://localhost:8000
实际连接到远程主机的 80
端口。
- 远程端口转发
将远程主机的端口流量转发到本地。
代码:
ssh -R 9000:localhost:22 user@remote_host
远程主机的 9000 端口
会连接到本地的 22
端口。
- 自动化管理:通过外部终端和 SSH 配合,可以实现批量任务执行。
代码:使用ssh
和bash
脚本批量执行命令:
for host in server1 server2 server3; dossh user@$host "uptime"
done
- 图形界面应用支持(X11 转发):SSH 支持 X11 转发,可以远程运行图形界面程序。
代码:
ssh -X user@remote_host
firefox
示例使用ssh协议和外部终端 PuTTY
的操作过程:
- 安装ssh协议:
sudo apt-get update //更新
sudo apt-get install ssh //安装ssh
- 开启ssh协议:
sudo /etc/init.d/ssh start //-->开启ssh
sudo /etc/init.d/ssh restart //-->重启ssh协议
- 关机指令:
#在命令行键入以下命令,系统立即关机 :
sudo shutdown -h now
#在命令行键入以下命令,系统立即重新启动 :
sudo shutdown -r now
sudo reboot now
使用外部链接软件(外部终端) putty,Xshell(这里使用putty),在我的资源中上传了一份 putty.exe
文件,需要的朋友自取即可:(操作之前,记得先打开ssh协议再连接!!否则会提示连接失败)。
使用ssh协议的安全性注意事项
禁用密码登录,启用密钥认证:
禁用密码登录,使用公钥认证提高安全性(代码配置):
PasswordAuthentication no
PubkeyAuthentication yes
关闭 SSH 的 root 登录:
禁止直接使用 root 登录:
PermitRootLogin no
使用非默认端口:
修改默认端口号(如从 22 改为其他端口)以减少扫描攻击:
Port 2222
配置防火墙限制:
使用防火墙(如 UFW 或 iptables)限制 SSH 访问的来源 IP。
定期更新 OpenSSH:
确保 SSH 软件保持最新版本,修复已知漏洞。
SSH协议 是一种安全、灵活的通信协议,广泛用于远程登录、文件传输和隧道转发等场景。外部终端 是 SSH 的重要交互工具,可以为用户提供远程系统的命令行或图形界面访问。在 实际应用 中,SSH 和外部终端结合,可实现远程管理、自动化任务、数据传输等功能。不过,在使用过程中也需要注意,在使用 SSH 时,务必关注 安全性配置,以防止未经授权的访问。
以上。仅供学习与分享交流,请勿用于商业用途!转载需提前说明。
我是一个十分热爱技术的程序员,希望这篇文章能够对您有帮助,也希望认识更多热爱程序开发的小伙伴。
感谢!