在上一篇文章中,我们介绍了 ssh 命令的基本用法和常用选项。每次都要手动输入繁琐的 IP 地址、用户名、端口号等信息,着实不便。

这时,SSH Config 文件 可以一次性解决这些问题。它就像收藏夹一样,保存常用服务器的连接信息,然后通过 别名(Alias) 轻松连接。

我在完全不了解 config 文件的“初学者”时期,曾经把常用的命令行直接写进 .bashrc 的 alias 中。后来学会了 config 文件的写法,才意识到自己之前的做法有多么低效。

SSH config 존재를 깨닫고 감탄하는 내모습


SSH Config 文件是什么?



SSH Config 文件 是用来自定义 SSH 客户端行为的配置文件。将特定主机的连接信息(用户名、端口、使用的密钥文件等)预先保存起来,之后只需使用短别名即可连接。

  • 位置: 通常位于用户主目录下的 .ssh 文件夹中,文件名为 config。如果你刚安装 SSH,可能还没有这个文件,需要手动创建。

  • 文件创建: 如果 ~/.ssh/config 不存在,可以直接创建。务必将权限设置为 600。

    touch ~/.ssh/config   
    chmod 600 ~/.ssh/config  # 为安全起见,权限设置是必需的!   

Config 文件编写规则

Config 文件是一个简单的文本文件,每个主机的设置都以 Host 关键字开始,构成一个独立的配置块。

基本结构

    Host [别名]     
        [选项1] [值1]          
        [选项2] [值2]     
        ...
  • Host [别名]:标识块的开始,并定义你将使用的 别名(Alias)。别名也可以直接写实际主机地址(IP 或域名),甚至使用通配符(*?)。
  • 缩进Host 下的选项必须缩进。空格或制表符都可以,但保持一致性更好。
  • 选项Host 下列出的各种 SSH 选项与 ssh 命令的 -选项 用法相同。

常用选项

选项 说明 示例值
HostName 实际连接的服务器 IP 或域名 192.168.1.100example.com
User 远程服务器的登录用户名 ubuntuec2-userroot
Port 远程服务器的 SSH 端口(默认 22) 2222
IdentityFile 连接时使用的私钥文件路径 ~/.ssh/id_ed25519_myserver
ForwardAgent 启用 SSH 代理转发(ssh-agent yes
StrictHostKeyChecking 是否严格检查主机密钥(推荐 yes no(初始测试时临时使用)
PortForwarding 是否允许端口转发 yes
LocalForward 本地端口转发设置(等同 -L 8080 localhost:80
ServerAliveInterval 检查服务器存活的间隔(秒) 60(防止断线)
ServerAliveCountMax 失败后重试次数 3

SSH Config 文件编写示例



让我们将常用服务器的配置添加到 ~/.ssh/config 中。

# 第一个服务器:Web 服务器(别名:webserver)
Host webserver
    HostName 192.168.1.100
    User ubuntu
    Port 2222
    IdentityFile ~/.ssh/id_ed25519_webserver # 使用专属密钥

# 第二个服务器:开发服务器(别名:devbox)
Host devbox
    HostName dev.example.com
    User developer
    IdentityFile ~/.ssh/id_rsa_dev # RSA 密钥
    # 连接时将本地 8000 端口转发到远程 80 端口
    LocalForward 8000 localhost:80 

# 第三个服务器:所有 AWS EC2 服务器(别名:aws-*)
Host aws-*
    User ec2-user
    IdentityFile ~/.ssh/aws_ec2_key.pem
    # 定期发送信号,防止断线
    ServerAliveInterval 60
    ServerAliveCountMax 3

# 特定 IP 段的通用设置(别名:10.0.0.*)
Host 10.0.0.*
    User admin
    Port 22

说明:

  • webserver:使用 ubuntu 用户、2222 端口和 id_ed25519_webserver 密钥连接 192.168.1.100
  • devbox:使用 developer 用户、id_rsa_dev 密钥连接 dev.example.com,并将本地 8000 端口转发到远程 80 端口。
  • aws-*:所有以 aws- 开头的别名都会使用 ec2-useraws_ec2_key.pem,并保持连接活跃。
  • 10.0.0.*:匹配 10.0.0.x 的 IP,默认使用 admin 用户和 22 端口。

事实上,我很少使用 * 通配符。通常我会为每台服务器单独配置,保持 1:1 映射更易管理。
但如果同一台服务器有多种访问方式,我会为每种方式添加一个别名,像点餐一样挑选别名 ssh my-alias 即可。


SSH 접속 버튼을 누르자 네트워크로 퍼지는 마법 같은 이미지

Config 文件使用方法

现在配置已保存,实际连接会更简洁。让我们基于上面的示例来试试。

1. 用别名连接

只需使用别名即可。

  • 使用 webserver 别名:
    ssh webserver
    Enter passphrase for key '/home/youruser/.ssh/id_ed25519_webserver':
    ubuntu@webserver-ip:~ $

这条命令内部等价于 ssh -p 2222 -i ~/.ssh/id_ed25519_webserver ubuntu@192.168.1.100

  • 使用 devbox 别名:
    ssh devbox
    Enter passphrase for key '/home/youruser/.ssh/id_rsa_dev':
    developer@devbox-domain:~ $

同时连接时本地 8000 端口会转发到 dev.example.com 的 80 端口。


Config 文件使用的优势

  • 便利性: 用短别名替代冗长命令,减少输入错误,节省时间。
  • 生产力: 快速切换常用服务器,提高工作效率。
  • 易于管理: 所有连接设置集中在一个文件,维护更简单。服务器 IP 变更时,只需改动 config 即可。
  • 安全性: 重要信息(如密钥路径)不再出现在命令历史中。

结语

SSH Config 文件是每位使用 SSH 的开发者和系统管理员必备的工具。通过它,你可以让 SSH 连接体验更便捷、更高效。打开 ~/.ssh/config,为你自己的服务器创建别名吧!

如果你想了解更多关于 SSH 的内容,右侧搜索框中输入 ssh,即可找到相关文章。

有任何疑问,欢迎在评论区提问!