前言
企业内部大部分服务器都只有内网,一般可以使用 NAT 方式正向代理访问公网资源。对于 Linux 来说一般通过 ssh 登录服务器,在没有公网 IP 的情况下可以修改 ssh config 配置文件,利用一台可以接入内网并具有公网 IP 的服务器作为代理或者称为 Tunnel 跳板机来管理,可以灵活定制访问规则并优化 ssh 参数让管理更加轻松。
使用 ssh config 作为 ssh 代理轻松管理内网服务器
扩展阅读
SSH CONFIG FILE - https://www.ssh.com/ssh/config/
ssh_config 的配置文件来源
1 | man ssh_config |
ssh 程序可以从三个途径获取配置参数:
- 命令行选型,比如 -F configfile
- 用户配置文件,放置在 ~/.ssh/config
- 系统配置文件,放置在 /etc/ssh/ssh_config(区别于 /etc/ssh/sshd_config)
上面三个途径,前面的途径传入的参数可以覆盖后面的途径传入的参数(与 linux 里的大部分应用类似)。因为 / etc/ssh/ssh_config 会影响 ssh 全局的配置,因此如果想对多主机进行管理(不影响别人的情况下),可以考虑修改自己家目录下的/.ssh/config 文件( 字符表示当前登录用户的家目录)。
ssh_config 配置文件实例
首先看一个配置文件的 demo,假设 8.8.8.8 是你可以直接登录的 Tunnel 公网跳板机,10.65.32.0 是需要管理的内网地址段,前提是 8.8.8.8 和内网服务器的防火墙策略均已配置正确,这里就不再赘述。
1 | # cat ~/.ssh/config |
CheckHostIP no,禁用 known_hosts 检查
Directs ssh to additionally check the host IP address in the known_hosts file.
StrictHostKeyChecking no,跳过 known_hosts 写入
Specifies if ssh should never automatically add host keys to the ~/.ssh/known_hosts file, and refuses to connect to hosts whose host key has changed.
Host 字段
Host 字段配置了登录别名,这里需要注意的是,Host 是支持通配符的, * 代表 0~n 个非空白字符,? 代表一个非空白字符,! 表示例外通配
HostName 字段
指定远程主机名,可以直接使用 IP 地址。如果这个字段中包含 ‘%h’ ,则实际使用时会被命令行中的主机名替换
User 字段
指定登录用户名
IdentityFile 字段
指定密钥认证使用的私钥文件路径。默认为 ~/.ssh/id_rsa。这个字段可以指定多个密钥文件(以 , 分开),在连接的过程中会依次尝试这些密钥文件。和 HostName 字段一样,值也可以直接指定参数代替:
Port 字段
指定远程主机端口号,默认为 22 。
%h,远程主机名
%p,远程端口
参考
如果你还不了解 ssh 或者对 ssh 端口转发感兴趣,可以参考以下内容
SSH 使用密钥登录并禁止口令登录实践 - https://wsgzao.github.io/post/ssh/
玩转 SSH 端口转发 - https://blog.fundebug.com/2017/04/24/ssh-port-forwarding/