【Day 17】Linux-SSH远程连接
一、服务器操作方式
(一)本地操作
直接在服务器物理设备上进行的操作,通常需要物理接设备。
- 适用场景:硬件故障排查、BIOS设置调整、操作系统初始安装等。
- 特点:无需网络依赖,但受地理位置限制,效率较低。
(二)远程操作
通过网络连接到服务器进行管理,无需物理接触设备。
- 适用场景:日常运维、配置修改、应用部署等。
特点:依赖网络,灵活性高,支持跨地域管理。
1、常见远程连接协议
(1)SSH
//(Secure Shell)
功能:加密的远程登录协议,用于安全访问命令行界面。支持加密通信。
端口:默认22。
适用场景:Linux/Unix服务器管理、文件传输(SCP/SFTP)。
(2)Telnet
功能:早期的明文远程登录协议。无加密,安全性低。
端口:默认23。
适用场景:内网设备调试(已逐渐被SSH取代)。
(3)RDP
//(Remote Desktop Protocol)
功能:图形化远程桌面协议,由微软开发。
端口:默认3389。
适用场景:Windows服务器的图形化远程桌面连接,win+R,输入mstsc。
(4)VNC
(Virtual Network Computing)
功能:跨平台的图形化远程控制。
端口:通常5900(服务端)或5800(网页访问)。
适用场景:远程技术支持、跨操作系统访问。
(5)FTP/SFTP/FTPS
功能:文件传输协议(FTP)及其安全版本(SFTP基于SSH,FTPS基于SSL)。
端口:FTP(21控制/20数据),SFTP(22),FTPS(990)。
适用场景:安全文件上传下载。
服务器端开启ssh服务,客户端需要ssh工具
2、SSH/SSHD服务
sshd 和 ssh 是 OpenSSH 套件中两个核心组件,共同实现安全的远程登录和文件传输功能。
ssh 是客户端工具,用于发起加密连接。
sshd 是服务端守护进程,负责监听并处理客户端请求。
协同工作流程
客户端请求
用户通过 ssh 命令发起连接请求,指定目标服务器和认证信息(如密钥或密码)。服务端响应
sshd接收到请求后,验证客户端身份,协商加密算法并建立安全通道。会话维持
连接建立后,ssh 和 sshd 持续通信,加密所有传输数据,直至会话终止。
关键配置文件
客户端配置 : ~/.ssh/config 文件权限600,需要root权限
定义连接参数。指定主机别名、端口、密钥文件、用户名等。
修改无需重启服务,立即生效
服务端配置 : /etc/ssh/sshd_config
控制服务端行为。如监听端口、是否允许密码登录、是否允许 root 登录等。
影响所有通过 SSH 连接到该服务器的用户,修改后需重启 SSH 服务生效
3、查看服务是否打开
centos的sshd是默认开着的
(1)查看服务运行状态
- # systemctl status <服务名>
若服务正在运行,输出会显示active (running)
;若未运行,则显示inactive (dead)
(2)查看进程
- # ps -elf | grep <服务名或进程关键词>
(3)查看端口
- # ss -tulnp | grep 端口号 //需要root权限
- # netstat -tunlp | grep 端口号 //需要root权限
(4)查看日志输出
- # journalctl -u <服务名> --no-pager //禁用分页显示
(5)若没有,需要下载并且启用。
服务器端开启ssh服务,客户端需要ssh工具
4、常见SSH工具
SSH工具是实现SSH协议的客户端或服务器软件,提供加密通信、身份验证和数据传输功能。
- 图形化工具:通过图形界面实现远程控制,适合操作完整桌面环境。
- 命令行工具:命令行连接服务器或设备。
图形化与命令行混合工具:结合图形界面和命令行操作,平衡易用性与灵活性。
云平台控制台:云服务商提供的网页版SSH功能,无需本地安装客户端。
图形化工具
- TeamViewer:跨平台远程控制工具,支持文件传输、会议功能,适合个人和小团队使用。
- AnyDesk:轻量级远程桌面工具,低延迟,适合临时远程支持。
- Windows远程桌面(RDP):适用于Windows系统间的远程管理,需配置网络权限。
命令行工具
- PuTTY:免费开源工具,轻量级,功能简单,仅支持基础SSH/Telnet连接。
- OpenSSH:Linux/macOS原生SSH工具,支持加密通信和端口转发。
混合型工具
- Xshell:功能强大的SSH客户端,支持多标签和脚本录制,提供命令行与图形化混合界面。
- FinalShell:国产工具,集成SSH、SFTP及服务器监控,命令行与图形化功能结合。
- Termius:跨平台SSH客户端,支持多设备同步,提供命令行和图形化混合操作。
- MobaXterm:集成了SSH、SFTP、X11服务器,提供多标签管理和图像化工具
- SecureCRT:商业SSH工具,支持命令行操作和图形化标签管理,适合企业环境。
云平台控制台
- AWS Systems Manager:无需开放22端口,通过IAM权限直接连接EC2。
- 阿里云Workbench:支持浏览器内SSH会话,自动处理密钥对。
- Google Cloud Shell:提供预配置的临时Linux环境。
这里我们使用Xshell讲解(Day13 下了)先建立会话然后点击连接。
接下来先不讲操作,先简单介绍一下数据加密
二、数据加密类型
数据加密:通过将明文数据转换为密文,确保数据在传输或存储过程中的机密性。
算法是公开的标准化方法,而密钥是保密的动态参数。
(一)密钥
密钥是加密和解密过程中的关键参数,通常是一串随机生成的字符或数字。它决定了数据转换的具体方式,即使相同的算法使用不同的密钥,加密结果也会完全不同。
密钥分为对称密钥(加密解密使用同一密钥)和非对称密钥(公钥加密、私钥解密)。
(二)算法
1、对称加密
(1)概念和类型
对称加密使用相同的密钥进行加密和解密。
速度快、效率高,适合大数据量加密,但需确保密钥在分发过程中不被泄露。
AES(Advanced Encryption Standard)
当前最广泛使用的对称加密算法,支持128、192、256位密钥长度,安全性高且性能优异。DES(Data Encryption Standard)
早期标准,现因密钥长度过短(56位)被认为不安全,已被AES取代。3DES(Triple DES)
DES的改进版,通过三次加密提升安全性,但效率较低。
(2)对数据文件加密/解密
- # openssl enc -e -des -in 待加密的输入文件路径 -out 加密后的输出文件路径
- # openssl enc -d -des -in 待解密的输入文件路径 -out 解密后的输出文件路径
openssl enc -e:调用OpenSSL的加密模块,-e
加密 -d解密
-des :指定使用DES(Data Encryption Standard)对称加密算法
加密解密用的算法需要一样哦
2、非对称加密
(1)概念和类型
非对称加密使用公钥和私钥配对。公钥用于加密,私钥用于解密。
解决了密钥分发问题,但计算复杂度高,通常用于小数据加密或密钥协商。
RSA
基于大整数分解难题,广泛用于数字签名和密钥交换。密钥长度通常为2048位或更长。ECC(Elliptic Curve Cryptography)
基于椭圆曲线数学,在相同安全强度下密钥长度比RSA更短,适合资源受限场景。Diffie-Hellman
用于安全密钥交换,允许双方在不安全的通道上生成共享密钥。应用领域:
数据加解密:公钥加密,私钥解密。例如:加密文件存储
身份认证:例如SSH密钥登录服务器
数字签名:通过私钥对文档或消息生成签名,公钥用于验证签名真实性。
3、哈希加密
哈希加密将数据转换为固定长度的哈希值,具有不可逆性和唯一性。常用于验证数据完整性或存储密码。
SHA-256(Secure Hash Algorithm)
属于SHA-2家族,输出256位哈希值,广泛应用于区块链和数字证书。MD5(Message Digest Algorithm 5)
生成128位哈希值,因易受碰撞攻击,已不推荐用于安全场景。bcrypt
专为密码存储设计,内置盐值(salt)和多次迭代,有效抵抗彩虹表攻击。
四、SSH详解
(一)单Linux主机连接登录
1、发送登录请求
- # ssh root@服务器IP
2、提示是否要接受主机密钥(实际上虚拟机将自身的公钥发送给客户端,确认客户端是否接受)
我们在这里的客户端是windows中的Xshell,服务器是虚拟机。
由于我们点击了接受并保存,所以客户端连接时会将此公钥保存到主机密钥中。后续连接时会对比服务器发送的公钥与客户端本地存储的是否一致。
//这里可以密码认证或者密钥认证
3、这边先解释下密码认证和密钥认证的区别
由图可知:
(1)若是密码登录,我们不需要手动添加服务器(虚拟机)的公钥,只需要我们密码。
(2)若是密钥登录,我们需要提前在服务器(虚拟机)上配置公钥。
4、密码登录就输入密码就好了,这里讲一下密钥登录
(1)要在服务器(虚拟机)上配置公钥,首先需要先获取一对公钥私钥并保存在客户端上。
这里我们会保存一个公钥文件,我们先保存到我们window是系统上的一个地方。
(2)在虚拟机(服务器)上配置公钥。
//这里可以先密码登录Xshell,使用文件传输。把刚刚获得公钥文件传输给虚拟机。
//可以看见是传到/root下了
接下来把传输到/root目录下的公钥文件改名为(authorized_keys)保存在.ssh(自己创建)目录下
root用户和普通用户
(1)root用户
(2)普通用户,这里用test。
这样就把公钥配置到虚拟机上了。使用Xshell密钥登录输入密码(建公钥对那时候设置的)即可。
(二)多个linux主机之间互联
既有服务端功能,又有客户端功能,所以可以实现多个主机之间互联。
- # ssh 用户名@服务器IP
//首次连接会让确认是否要接受密钥。必须确认哦。exit退出连接。
基于用户的免密互联
(1)客户端生成密钥对
- # ssh-keygen -t rsa -b 4096 // 默认密钥保存路径~/.ssh/id_rsa
-t rsa
指定密钥类型为RSA算法-b 4096
定义密钥长度为4096位(默认2048位,建议使用更高强度)
(2)将客户端公钥复制到远程服务器
- # ssh-copy-id 用户名@IP地址
- 该命令会自动将~/.ssh/id_rsa.pub(或其他默认公钥)追加到远程服务器的~/.ssh/authorized_keys文件中。
以上是以root用户可以互联,若以普通用户连,需要将公钥copy给普通用户。
(三)执行远程命令
- # ssh 用户名@服务器IP 命令路径
(四)远程拷贝文件
- # scp 本地文件路径 用户名@服务器IP:远程路径 //从本地拷贝文件到远程服务器
- # scp 用户名@服务器IP:远程文件路径 本地路径 //从远程服务器拷贝文件到本地
递归拷贝整个目录加一个参数 -r
- # cat .ssh/known_hosts //查看存储的 SSH 客户端连接过的远程主机的公钥指纹。
(四)SSH常用配置
/etc/ssh/sshd_config
- # sudo systemctl restart sshd //!!~更改完了要重启SSH服务哦
(1)改端口
端口号<1024的端口通常被称为“知名端口”或“系统端口”,这些端口通常预留给系统级服务或特权服务使用。所以<1024的最好不要用。最好用五位数数字
改端口之后,由于默认端口是22,所以ssh root@IP 新端口号 //才可登录
scp命令要加参数-P。
(2)permitrootlogin yes //默认允许管理员登录。改成no,禁用root登录
(3)passwordauthentication no //禁止密码认证,只能密钥登录
改之前,一定要把服务器的密钥先加上!
(4)关掉DNS 反向解析
SSH 服务器对客户端 IP 地址执行 DNS 反向解析,可能导致 SSH 连接延迟。
- # echo 123> file01 //将文本123内容写入文件file01
- # history //会按照时间顺序列出之前输入的命令