在上一篇文章中,我们探讨了 ssh 命令的基本用法和一些有用的选项。然而,每次都要输入复杂的 IP 地址、用户名和端口号,实在是麻烦。在这种情况下,利用 SSH Config 文件 就可以一次性解决这些麻烦。它就像一个书签,帮你保存常用的服务器接入信息,让你可以用 别名(Alias) 轻松接入。

使用 SSH config 像书签一样的开发者插图


什么是 SSH Config 文件?

SSH Config 文件 是一个设置文件,用于自定义 SSH 客户端的操作方式。将特定主机的接入信息(用户名、端口、使用的密钥文件等)预先存储在该文件中,后续接入时只需使用简短的别名即可。

  • 位置: 通常位于用户主目录下的 .ssh 文件夹中,文件名为 config
    • 示例:~/.ssh/config
  • 文件创建: 如果 ~/.ssh/config 文件不存在,可以手动创建该文件。

    bash touch ~/.ssh/config chmod 600 ~/.ssh/config # 为安全起见,仅赋予所有者读写权限


Config 文件编写规则

Config 文件是简单的文本文件,各主机的设置以 Host 关键字开头并以块的形式编写。

基本结构

Host [别名]
    [选项1] [值1]
    [选项2] [值2]
    ...
  • Host [别名]: 指示该块的开始并定义您将使用的 别名(Alias)。该别名将在 SSH 命令中使用。您也可以直接放入实际的主机地址(IP 或域名)。也可以使用通配符字符(*, ?)。

  • 缩进: Host 下的选项需要缩进。可以使用空格或制表符,但最好保持一致。

  • 选项: Host 下列出在使用该别名连接时适用的各种 SSH 选项。这些选项与之前使用的 ssh -选项 形式相同。

常用选项

选项 说明 示例值
HostName 实际连接的服务器 IP 地址或域名 192.168.1.100example.com
User 连接远程服务器的用户账户名 ubuntu, ec2-user, root
Port 远程服务器的 SSH 端口号(默认 22) 2222
IdentityFile 连接时用的私钥文件路径 ~/.ssh/id_ed25519_myserver
ForwardAgent 启用 SSH 代理转发(Agent Forwarding,使用 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 # 使用专用的 Web 服务器密钥

# 第二服务器:开发服务器(别名: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- 开头的别名的设置。例如,连接 aws-prodaws-dev 时,UserIdentityFile 设置将自动应用。连接到 aws-prod 时,HostName 将是 prod(稍后通过 ssh aws-prod 命令使用)。

  • 10.0.0.*: 在要连接形如 10.0.0.x 的 IP 地址时,将自动应用 admin 用户和默认 22 端口。


按下 SSH 接入按钮让网络中的魔法图像

Config 文件用法

现在您已将设置存储在 Config 文件中,实际接入将变得简单得多。让我们以上述示例为基础试试吧?

1. 通过别名接入

只需使用别名来运行 SSH 接入命令。

  • webserver 别名使用:
    ssh webserver
    输入密钥的密码:'/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
    输入密钥的密码:'/home/youruser/.ssh/id_rsa_dev'
    developer@devbox-domain:~ $
(同时通过本地 8000 端口连接到 dev.example.com 的 80 端口)
  • aws-prod(通配符别名)使用:
    ssh aws-prod
    输入密钥的密码:'/home/youruser/.ssh/aws_ec2_key.pem'
    ec2-user@aws-prod-hostname:~ $

注意: 对于像 aws-prod 这种没有单独指定主机名的通配符 Host,可能需要显式指定 HostName 选项,或在命令行提供主机名。在上面的 aws-* 示例中,由于未指定 HostName,因此实际运行 ssh aws-prod 时,SSH 客户端会将 prod 解读取为主机名。更清晰的用法是将别名和 HostName prod.example.com 之间进行映射,例如 Host prod-server


Config 文件使用的优点

  • 便利性: 将冗长复杂的 SSH 命令替换为简短的别名,减少输入错误并节省时间。
  • 生产力: 能够快速切换到常用服务器,提升工作效率。
  • 管理方便: 所有连接相关的设置都可集中管理,便于维护。例如,服务器的 IP 地址改变了,只需修改 Config 文件即可。
  • 安全性: 无需在命令历史中留下重要信息(如密钥文件路径)。

总结

SSH Config 文件是所有使用 SSH 的开发者和系统管理员的必备工具。利用该文件,可以使您的 SSH 连接体验更加便捷高效。打开 ~/.ssh/config 文件,创建您自己的别名吧!

也请查看与 SSH 相关的其他文章!在右侧的搜索框中搜索 'ssh',可以找到许多关于 SSH 的文章。

如果有疑问,欢迎随时留言提问!