当前位置: 首页 > news >正文

【Linux从入门到精通】第19篇:SSH远程管理进阶——不只是输入密码

目录

一、引言:密码登录的三个痛点

二、SSH密钥对:更安全、更便捷的认证方式

2.1 密码 vs 密钥:两种认证方式

2.2 生成密钥对

2.3 将公钥安装到服务器

2.4 测试免密登录

2.5 禁用密码登录(提升安全性)

三、~/.ssh/config:多服务器管理神器

3.1 痛点:记不住IP

3.2 创建配置文件

3.3 使用别名连接

3.4 常用配置项

四、SCP与SFTP:文件传输方案对比

4.1 SCP:简单直接的文件拷贝

4.2 SFTP:交互式文件管理器

4.3 SCP vs SFTP:如何选择?

五、综合实战:搭建一个高效的管理环境

六、本篇小结

动手练习

七、下篇预告


一、引言:密码登录的三个痛点

还记得第一篇我们购买的云服务器吗?那时我们用的是密码登录:

bash

ssh root@123.456.789.0 # 输入密码……

这种方式用久了,几个痛点会越来越明显:

  1. 每次都要输密码,密码短了不安全,长了手酸

  2. 多台服务器要记多个IP和密码,脑容量告急

  3. 密码可以被暴力破解,你的服务器时刻在被全世界的扫描器试探

今天我们要解决的,就是这三个问题。目标很明确:敲几个字母就能安全登录任意一台服务器,还能方便地传文件

二、SSH密钥对:更安全、更便捷的认证方式

2.1 密码 vs 密钥:两种认证方式

SSH支持两种认证方式:

方式原理安全性便捷性
密码认证你知道什么取决于密码强度,可被暴力破解每次都要输入
密钥认证你拥有什么非对称加密,几乎无法暴力破解一次配置,终身免密

密钥认证的核心是非对称加密:你拥有一对密钥——公钥和私钥。

  • 私钥:绝对保密,存放在你自己的电脑上(~/.ssh/id_rsa

  • 公钥:公开的,安装到你需要登录的服务器上(~/.ssh/authorized_keys

它们之间存在数学关联:公钥加密的数据只能用私钥解密,私钥签名的数据能用公钥验证。登录时,服务器用公钥加密一个随机数发给你,你能用私钥解密并正确回复,就证明你是密钥的主人,无需密码。

一个重要的直观理解:可以把公钥想象成一把挂锁,私钥是唯一能打开这把锁的钥匙。你把挂锁(公钥)装到服务器门上,之后只有手握钥匙(私钥)的人才能开门进去。

2.2 生成密钥对

在你的本地电脑(不是服务器)上执行:

bash

ssh-keygen -t ed25519 -C "your_email@example.com"

参数说明:

  • -t ed25519:使用Ed25519算法(比传统RSA更安全、更短、更快,现代系统已全面支持)

  • -C:添加注释(通常写邮箱),方便识别这是哪把密钥

执行过程:

text

Generating public/private ed25519 key pair. Enter file in which to save the key (/home/you/.ssh/id_ed25519): Enter passphrase (empty for no passphrase): Enter same passphrase again:

三次询问:

  1. 保存位置:直接回车,使用默认路径

  2. 密码短语:可设置一个额外密码保护私钥(即使私钥泄露也多一层防护),学习阶段可直接回车留空

  3. 确认密码短语

生成的文件:

text

~/.ssh/id_ed25519 # 私钥(绝不给任何人看) ~/.ssh/id_ed25519.pub # 公钥(可以公开,分发到服务器)

查看公钥内容

bash

cat ~/.ssh/id_ed25519.pub

输出类似:ssh-ed25519 AAAAC3NzaC1l... your_email@example.com

2.3 将公钥安装到服务器

安装公钥最简单的方法是使用ssh-copy-id命令:

bash

ssh-copy-id user@服务器IP

系统会提示你输入一次服务器密码(最后一次),然后公钥就自动追加到服务器的~/.ssh/authorized_keys文件中。

手动安装方法(如果ssh-copy-id不可用):

bash

# 1. 复制公钥内容 cat ~/.ssh/id_ed25519.pub # 2. 登录服务器 ssh user@服务器IP # 3. 在服务器上执行 mkdir -p ~/.ssh echo "刚才复制的公钥内容" >> ~/.ssh/authorized_keys chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys exit

⚠️权限设置极其重要.ssh目录必须是700(只有自己能读写执行),authorized_keys必须是600(只有自己能读写)。权限错一点,SSH就会拒绝密钥认证。

2.4 测试免密登录

bash

ssh user@服务器IP

如果直接进入了,不再提示密码——配置成功!

如果仍然要求密码,按以下顺序排查:

bash

# 在服务器上查看SSH日志 sudo tail -f /var/log/auth.log # Ubuntu/Debian sudo tail -f /var/log/secure # CentOS/RHEL # 检查权限(在服务器上) ls -la ~/.ssh/ # drwx------ (700) → 正常 # -rw------- (600) → 正常

常见原因:权限错误、服务器未开启密钥认证(检查/etc/ssh/sshd_configPubkeyAuthentication yes)。

2.5 禁用密码登录(提升安全性)

配置好密钥登录后,建议禁用密码登录以杜绝暴力破解:

bash

sudo vim /etc/ssh/sshd_config

修改或确认以下三项:

text

PubkeyAuthentication yes PasswordAuthentication no PermitEmptyPasswords no

重启SSH服务:

bash

sudo systemctl restart sshd

关键提醒:在确认密钥登录成功之前,不要关闭当前的SSH连接!另开一个终端窗口测试密钥登录,确认能连上后再关闭密码登录。否则一个配置错误可能导致自己永远进不去。

三、~/.ssh/config:多服务器管理神器

3.1 痛点:记不住IP

假设你管理着多台服务器:

text

阿里云ECS:root@47.xx.xx.xx 腾讯云CVM:ubuntu@129.xx.xx.xx 公司测试服:test@10.0.0.xx 家里的树莓派:pi@192.168.1.xx

每次连接都要回忆“这台是用root还是ubuntu?”“IP是多少来着?”

3.2 创建配置文件

在本地创建~/.ssh/config文件:

bash

vim ~/.ssh/config

ini

Host aliyun HostName 47.xx.xx.xx User root Port 22 IdentityFile ~/.ssh/id_ed25519 Host tencent HostName 129.xx.xx.xx User ubuntu IdentityFile ~/.ssh/id_ed25519 Host testserver HostName 10.0.0.xx User test Port 2222 # 如果修改了SSH端口 Host raspberry HostName 192.168.1.xx User pi

3.3 使用别名连接

配置完成后,只需要:

bash

ssh aliyun # 等同于 ssh root@47.xx.xx.xx ssh tencent # 等同于 ssh ubuntu@129.xx.xx.xx

Shell自动补全也支持这些别名——输入ssh a按Tab,自动补全为ssh aliyun

3.4 常用配置项

ini

Host myserver HostName 192.168.1.100 User deployer Port 2222 IdentityFile ~/.ssh/id_ed25519 ServerAliveInterval 60 # 每60秒发送心跳包,防止断线 Compression yes # 开启压缩(慢网络下提升体验) ForwardAgent no # 不转发认证代理

通配符配置:可以定义一套默认配置,应用于所有主机:

ini

Host * ServerAliveInterval 60 IdentityFile ~/.ssh/id_ed25519 ConnectTimeout 10 Host aliyun HostName 47.xx.xx.xx User root

所有主机自动启用60秒心跳、使用默认密钥、连接超时10秒。特定主机只需写差异化的HostName和User。

四、SCP与SFTP:文件传输方案对比

管理远程服务器时,不可避免地要在本地和服务器之间传文件。

4.1 SCP:简单直接的文件拷贝

scp(Secure Copy)用法和cp几乎一样,只是路径前面加上主机:

bash

# 本地文件上传到服务器 scp report.txt aliyun:/home/user/ # 从服务器下载文件 scp aliyun:/var/log/nginx/error.log ./error_aliyun.log # 上传整个目录(-r 递归) scp -r /myproject/ aliyun:/home/user/ # 在服务器之间直接传输 scp aliyun:/data/backup.tar.gz tencent:/data/

常用参数

  • -r:递归传输目录

  • -P 端口号:指定SSH端口(注意是大写P,与ssh命令的小写p不同)

  • -C:传输时压缩(慢网络推荐)

4.2 SFTP:交互式文件管理器

sftp更像一个“FTP客户端”,可以浏览、上传、下载、断点续传。

bash

sftp aliyun

进入SFTP交互界面后:

bash

# 远程服务器目录操作 ls # 列出远程目录 cd # 切换远程目录 pwd # 显示远程当前目录 # 本地目录操作 lls # 列出本地目录 lcd # 切换本地目录 lpwd # 显示本地当前目录 # 文件传输 put 本地文件 # 上传文件 get 远程文件 # 下载文件 put -r 本地目录/ # 上传整个目录 get -r 远程目录/ # 下载整个目录 # 断点续传 reput 本地文件 # 续传上传 reget 远程文件 # 续传下载 # 执行本地命令 !ls # 在本地执行ls !df -h # 在本地执行df -h # 退出 exit / quit

4.3 SCP vs SFTP:如何选择?

对比维度SCPSFTP
使用方式一行命令交互式会话
断点续传不支持支持(大文件传输利器)
浏览远程目录不支持支持
适合场景快速传单个文件、写脚本大文件、需要浏览挑选文件
速度较快略慢(协议开销略大)

选择建议

  • 明确知道文件路径,传完就完事 →scp

  • 大文件传输(需要断点续传)→sftpreput/reget

  • 不知道文件在哪,需要边看边找 →sftp交互浏览

  • 传输进度显示 →rsync -P-P=--partial --progress,支持断点续传和进度条)

五、综合实战:搭建一个高效的管理环境

假设你刚接手管理3台服务器,目标是建立一个安全、高效的管理环境。

第一步:在本地生成密钥对

bash

ssh-keygen -t ed25519 -C "admin@mycompany.com"

第二步:将公钥分发到所有服务器

bash

ssh-copy-id root@aliyun.example.com ssh-copy-id ubuntu@tencent.example.com ssh-copy-id deployer@test.local

第三步:配置别名

编辑~/.ssh/config

ini

Host * ServerAliveInterval 60 IdentityFile ~/.ssh/id_ed25519 Host prod HostName aliyun.example.com User root Host staging HostName tencent.example.com User ubuntu Host test HostName test.local User deployer Port 2222

第四步:测试免密登录

bash

ssh prod ssh staging ssh test

全部免密进入 → 配置成功。

第五步:在服务器上禁用密码登录(可选但强烈建议)

登录每台服务器,编辑/etc/ssh/sshd_config

text

PasswordAuthentication no

然后sudo systemctl restart sshd

第六步:日常使用

bash

# 登录生产服务器 ssh prod # 上传配置文件到生产服务器 scp nginx.conf prod:/etc/nginx/ # 从生产服务器下载日志 scp prod:/var/log/nginx/error.log ./today_error.log # 向测试服务器传输大量文件 sftp test > put -r ./deploy_package/ > exit

六、本篇小结

SSH密钥认证

  • ssh-keygen -t ed25519生成密钥对

  • ssh-copy-id user@host安装公钥

  • 私钥权限必须是600,.ssh目录权限700

多服务器管理

  • ~/.ssh/config定义主机别名

  • 支持通配符配置默认选项

文件传输

命令适用场景
scp快速单次传输,写脚本
sftp大文件续传,交互式浏览
rsync增量同步,备份(后续章节详述)

安全性提升

  • 启用密钥登录后,禁用密码登录

  • 修改默认SSH端口可减少90%的自动化攻击

动手练习

bash

# 1. 生成一对ed25519密钥(如果还没有) ssh-keygen -t ed25519 # 2. 查看公钥内容 cat ~/.ssh/id_ed25519.pub # 3. 如果有云服务器或虚拟机,配置免密登录 ssh-copy-id user@你的服务器IP # 4. 测试免密登录 ssh user@你的服务器IP # 5. 创建~/.ssh/config,为你的服务器配别名 vim ~/.ssh/config # 6. 练习scp传输 echo "test file" > test.txt scp test.txt 你的别名:/tmp/ ssh 你的别名 "cat /tmp/test.txt" # 7. 练习sftp sftp 你的别名 > ls /tmp > get /tmp/test.txt > exit

七、下篇预告

有了便捷的SSH连接,跑在服务器上的服务随时可能出现各种问题——CPU飙升、内存泄漏、磁盘I/O异常。

下一篇我们将学习性能监控工具大盘点,综合运用vmstatiostatdstat等工具,快速识别系统性能瓶颈。你将掌握一套标准化的性能诊断流程,在接到“服务器好慢”的告警时不再茫然。


延伸思考:SSH除了远程登录和文件传输,还有一个强大的功能——端口转发(SSH Tunneling)。它可以把远程服务器当作跳板,访问内网服务;也可以把本地端口映射到远程,临时暴露服务。这是运维和渗透测试中的重要技能。试试搜索“SSH端口转发 三种模式”,了解更多。

http://www.jsqmd.com/news/707021/

相关文章:

  • 基于本地LLM的智能桌面宠物开发指南:从架构设计到实践部署
  • 进制只是“数数的规则”,就像我们日常用十进制(逢10进1),计算机底层用二进制(逢2进1)
  • 计算机组成原理教学辅助:用LM Z-Image模拟CPU指令执行
  • 【AI】MCP和SKILLS区别
  • STM32MP157 Linux驱动学习笔记(三):系统级驱动框架(UART/PCIe)
  • 【vllm】(二)vLLM v1 Engine — 模块超深度逐行分析之三
  • 【Linux从入门到精通】第20篇:性能监控工具大盘点
  • RWKV7-1.5B-G1A模型效果展示:对比传统LSTM在文本生成上的优势
  • CAPIO架构:基于CHERI的细粒度安全用户空间驱动
  • 2026成都诚信净水系统供应商:家用地暖供应商、家用格力空调供应商、新风系统中央空调、格力中央空调供应商、格力中央空调总代理选择指南 - 优质品牌商家
  • ESP32-S3-BOX-3开发套件:智能语音与物联网应用实战
  • 机器学习数据快速分析:实战方法与关键洞察
  • 大语言模型幻觉现象解析与应对策略
  • 工业级Wi-Fi 7接入点EKI-6333BE-4GD技术解析与应用
  • AAEON GENE-EHL5工业级单板计算机解析与应用
  • 从新回看《道德经》第二十二章的炊者不立,发现了权力熵增定律的底层逻辑
  • 【Linux从入门到精通】第21篇:Shell脚本开篇——什么是Shell?写第一个Hello World
  • API版本管理:向后兼容与平滑升级的企业级方案
  • Docker AI Toolkit 2026隐藏模式曝光:仅限docker ai enable --stealth启动的联邦学习协调器(附实测吞吐对比表)
  • 2026年Q2四川民宿规划设计标杆名录及核心参数对比:成都商业规划设计公司/成都太空舱民宿公司/成都景区规划推荐/选择指南 - 优质品牌商家
  • GLM-4.1V-9B-Base与C语言交互:通过本地API实现轻量级集成
  • 不止于展示:用3D WebView for Windows在Unity里打造可交互的Web AR/VR应用原型
  • 那些“无用”的书,成就一个“有趣”的人
  • OpenAI发表Nature论文:揭开AI模型总“说谎”的真相,人类对AI准确性的评估促使其产生幻觉
  • Copilot Next 工作流自动化配置到底难在哪?92%开发者卡在第3步——资深架构师逐行调试实录
  • Ryujinx模拟器完全指南:跨平台Switch游戏体验与深度优化策略
  • 自由程序员越全能,越赚不到钱?别再死撑着当“全能工具人”了。
  • 机器学习随机性评估:重复实验次数计算与实践
  • 第二周.系统管理相关的操作总结
  • DTVM:融合EVM生态与Wasm性能的下一代确定性虚拟机