~/.ssh/config 作用详解

作者:哈里谢顿日期:2025/11/23

这是一个非常好的问题!我们来深入解释 ~/.ssh/config 的作用,以及你写的这段配置为什么能让 ssh devstack-vm 一键完成复杂连接。


📁 一、~/.ssh/config 是什么?

~/.ssh/configOpenSSH 客户端的用户级配置文件,用于为不同的 SSH 连接定义别名、主机地址、用户名、密钥、代理跳转、端口转发等参数。

✅ 它的作用类似于“SSH 连接的快捷方式 + 自动化脚本”。

当你执行:

1ssh some-host
2

SSH 客户端会:

  1. 查看 ~/.ssh/config 中是否有名为 some-hostHost
  2. 如果有,就自动应用其中的所有配置
  3. 如果没有,则按默认行为(直连、当前用户名、无代理等)处理

🔧 二、你的配置逐行解析

1Host devstack-vm
2  HostName 192.168.122.30
3  User stack
4  ProxyJump hanwang@192.168.18.133
5  LocalForward 8080 localhost:80
6
配置项含义
Host devstack-vm定义一个别名(nickname),以后可以用 ssh devstack-vm 代替完整命令
HostName 192.168.122.30真正要连接的目标 IP(即你的 DevStack 虚拟机)
User stack登录该 VM 时使用的用户名是 stack
ProxyJump [email protected]先通过跳板机 [email protected] 中转(相当于自动做 SSH 跳转)
LocalForward 8080 localhost:80在本地(你的电脑)监听 8080 端口,并将流量通过隧道转发到 VM 的 localhost:80

🔄 三、执行 ssh devstack-vm 时发生了什么?

原本你需要手动执行两步:

❌ 手动方式(繁琐):

1# 第一步:登录跳板机
2ssh hanwang@192.168.18.133
3
4# 第二步(在跳板机上):再登录 VM
5ssh stack@192.168.122.30
6

或者用旧式命令(嵌套 SSH):

1ssh -t hanwang@192.168.18.133 ssh stack@192.168.122.30
2

还要额外开一个终端做端口转发:

1ssh -L 8080:localhost:80 -J hanwang@192.168.18.133 stack@192.168.122.30
2

✅ 使用 config 后:

你只需输入:

1ssh devstack-vm
2

SSH 自动帮你完成:

  1. 以用户 hanwang 登录跳板机 192.168.18.133
  2. 从跳板机再以用户 stack 登录 192.168.122.30
  3. 同时在本地开启端口转发:localhost:8080 → VM:80

💡 这就像给复杂的命令起了个“快捷方式”,还附带自动化功能!


🌟 四、好处总结

优势说明
简化命令ssh devstack-vm 代替一长串参数
避免重复输入用户名、IP、跳板机等不用每次写
自动端口转发每次连接自动建立隧道,无需额外命令
支持密钥管理可指定 IdentityFile 使用特定私钥
提高安全性减少手动输入错误,避免密码泄露

🛠️ 五、扩展示例

你还可以添加更多功能:

1Host devstack-vm
2  HostName 192.168.122.30
3  User stack
4  ProxyJump [email protected]
5  LocalForward 8080 localhost:80
6  LocalForward 8774 localhost:8774   # Nova API
7  LocalForward 9696 localhost:9696   # Neutron API
8  IdentityFile ~/.ssh/id_rsa         # 指定私钥
9  IdentitiesOnly yes                 # 只用指定密钥
10  ServerAliveInterval 60             # 防止断连
11

这样一次连接,就能访问多个 OpenStack 服务!


✅ 六、注意事项

  1. 文件权限必须严格
1chmod 600 ~/.ssh/config  
2chmod 700 ~/.ssh  

否则 SSH 会忽略该文件(出于安全考虑)。 2. Host 名称区分大小写,建议全小写。 3. 缩进不是必须的,但为了可读性建议用空格对齐。


🎯 总结一句话:

~/.ssh/config 让你能用 简单别名(如 devstack-vm
自动完成 复杂连接逻辑(跳板机 + 用户名 + 端口转发),
极大提升开发和运维效率!

所以,ssh devstack-vm 能工作,不是魔法,而是你提前写好的“SSH 自动化剧本”在幕后默默执行 😊

如果你经常连接多台服务器,强烈建议善用这个文件!


~/.ssh/config 作用详解》 是转载文章,点击查看原文


相关推荐


【底层机制】Android图形渲染体系深度解析:VSync信号机制
沐怡旸2025/11/21

在Android图形渲染体系中,VSync(Vertical Synchronization,垂直同步)是贯穿CPU、GPU与显示器协同工作的核心机制。它不仅解决了画面撕裂、卡顿等关键问题,更定义了Android渲染的"时间节拍"。本文将从底层原理、Android实现架构、关键细节到开发实践,系统拆解VSync信号机制的核心逻辑。 一、核心定义:什么是VSync信号? VSync信号本质是显示器硬件产生的周期性同步信号,其周期与显示器刷新率强相关(例如60Hz刷新率对应16.67ms/帧,90


黑马程序员苍穹外卖(新手) DAY3
烤麻辣烫2025/11/19

公共字段自动填充 问题:代码冗余,不便于后期维护 自定义注解AutoFill,用于标识需要需要进行公共字段填充的方法 自定义切面AutoFillAspect,统一拦截加入了AutoFill注解的方法, 通过反射为公共字段赋值 在Mapper的方法上加入AutoFill注解 serviceImpl 技术点:枚举,注解,AOP,反射 新增菜品 文件上传 yml dev-yml OssConfiguration Co


如何用Claude Code构建公司:三家YC初创公司的案例研究
是魔丸啊2025/11/18

转载 日期:2025年11月17日 阅读时间:5分钟 Y Combinator是一家创业加速器,自2005年以来已经孵化了超过5000家公司,这些公司的总估值超过8000亿美元,包括Airbnb、Stripe和DoorDash等知名企业。 如今,像Claude Code这样的agent编码工具正在从根本上改变YC初创公司构建和扩展的方式。创始人现在可以直接从终端发布产品,将开发周期从几周压缩到几小时,甚至让非技术创始人从第一天起就能与成熟企业竞争。 我们采访了三家展示这一变革实践的YC初创公司:


Python 的内置函数 staticmethod
IMPYLH2025/11/17

Python 内建函数列表 > Python 的内置函数 staticmethod Python 的内置函数 staticmethod 用于将一个方法转换为静态方法。静态方法不需要隐式地传递任何参数(如 self 或 cls),它们与普通函数类似,但属于类的命名空间。 使用方法 定义静态方法:在类中使用 @staticmethod 装饰器来定义静态方法。 class MyClass: @staticmethod def static_method(arg1, arg2):


ArrayUtils:Java数组操作的瑞士军刀
白衣鸽子2025/11/16

1. 前言 本文介绍的 ArrayUtils 以org.apache.commons.collections4.ArrayUtils 为例 源代码:org.apache.commons.collections4.ArrayUtils 自定义特征可以在自己服务内实现 在Java应用开发中,数组操作是我们日常编码的基础任务之一。你是否曾写过下面这样的代码? public boolean findUser(String[] users, String targetUser) { if (u


一文搞懂 AI 流式响应
只想写个小玩意2025/11/15

这是 OpenAI 文档中流式响应的代码 platform.openai.com/docs/guides… import { OpenAI } from "openai"; const client = new OpenAI(); const stream = await client.responses.create({ model: "gpt-5", input: [ { role: "user", conte


TRAE SOLO推出1天啦,限免到15号,你还没体验吗
也无风雨也雾晴2025/11/13

Trae SOLO模式已经正式推出一天了 点击左上角的logo,就可以切换solo模式了,切换后的ide布局非常的酷炫,有两个模式 coder:可以用来改bug,写需求这些 builder:适合从0到1的开发,从生成prd开始到构建完整项目,而且trae还提供了便捷部署到vercel可以线上访问的集成 但是没有模型相关的选择,内置进去了,没有暴露出来给用户去选择 我试了一下使用coder改bug,plan模式下提出需求或者bug,会先生成文档,你可以根据文档再次确认需求,没问题后开始实施,这


一文看懂 Agentic AI:搭建单体 vs 多智能体系统,结果出乎意料!
玩转AGI2025/11/12

一文看懂 Agentic AI:搭建单体 vs 多智能体系统,结果出乎意料! 最近,我开始尝试构建不同类型的 Agentic AI 系统,最让我着迷的,是“单智能体(Single-Agent)”和“多智能体(Multi-Agent)”的差异。【AI大模型教程】 说实话,在没真正动手之前,我也只是听过这些概念,觉得听起来很玄。直到我用 LangGraph 和 LangSmith Studio 亲自搭建了两个版本,一个“单兵作战”,一个“多智能体协作”,结果真的让我彻底改观。 我想造一个能帮我追踪


Guava 迭代器增强类介绍
桦说编程2025/11/10

Guava 库为 Java 开发者提供了一系列强大的迭代器增强工具,它们简化了复杂迭代模式的实现。本文将深入探讨 Guava 的 PeekingIterator、AbstractIterator 和 AbstractSequentialIterator。 1. PeekingIterator:洞察先机 标准的 Iterator 接口仅提供 hasNext() 和 next() 方法,这在某些场景下显得力不从心。当需要“预读”下一个元素以做出决策,但又不想立即消耗它时,PeekingIterato


🍎 Electron 桌面端应用合法性问题全流程解决指南(新手友好版)
去码头整点薯片2025/11/8

本文目标:帮助你把本地的 Electron 应用打包成 macOS 的 .dmg,并做到打开不再被 Gatekeeper 拦截(不再提示“来自身份不明的开发者/无法验证是否含有恶意软件”)。 适用对象:个人开发者 & 小团队。 🧩 一、问题场景 当你满心欢喜地将精心开发的 Electron 应用打包分发给用户,却接到反馈:在 macOS 上无法打开,系统弹窗冷冰冰地提示“无法验证开发者”,文件被直接移入废纸篓。 如果这个场景让你感同身受,那么你正遭遇 macOS 强大的 Gatekeepe

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2025 聚合阅读