V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wsgzao
V2EX  ›  程序员

使用 ssh config 作为 ssh 代理轻松管理内网服务器

  •  
  •   wsgzao ·
    wsgzao · 2019-02-01 16:11:39 +08:00 · 1643 次点击
    这是一个创建于 2120 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前言

    企业内部大部分服务器都只有内网,一般可以使用 NAT 方式正向代理访问公网资源。对于 Linux 来说一般通过 ssh 登录服务器,在没有公网 IP 的情况下可以修改 ssh config 配置文件,利用一台可以接入内网并具有公网 IP 的服务器作为代理或者称为 Tunnel 跳板机来管理,可以灵活定制访问规则并优化 ssh 参数让管理更加轻松。

    使用 ssh config 作为 ssh 代理轻松管理内网服务器


    更新历史

    2019 年 01 月 31 日 - 初稿

    阅读原文 - https://wsgzao.github.io/post/ssh-config/

    扩展阅读

    SSH CONFIG FILE - https://www.ssh.com/ssh/config/


    ssh_config 的配置文件来源

    man ssh_config
    
    NAME
         ssh_config -- OpenSSH SSH client configuration files
    
    DESCRIPTION
         ssh(1) obtains configuration data from the following sources in the following order:
    
               1.   command-line options
               2.   user's configuration file (~/.ssh/config)
               3.   system-wide configuration file (/etc/ssh/ssh_config)
    

    ssh 程序可以从三个途径获取配置参数:

    1. 命令行选型,比如 -F configfile
    2. 用户配置文件,放置在 ~/.ssh/config
    3. 系统配置文件,放置在 /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 和内网服务器的防火墙策略均已配置正确,这里就不再赘述。

    # cat ~/.ssh/config
    
    StrictHostKeyChecking no
    CheckHostIP no
    
    Host 10.65.32.*
      HostName %h
      ProxyCommand ssh bastion_GOP_SG_NC_MAIN -W %h:%p
    Host bastion_GOP_SG_NC_MAIN
      HostName 8.8.8.8
      port 22
      User wangao
    
    Host 10.65.200.*
      HostName %h
      ProxyCommand ssh bastion_GOP_SG_MH_MAIN -W %h:%p
    Host bastion_GOP_SG_MH_MAIN
      HostName 9.9.9.9
      port 22
      User wangao
    
    

    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,远程端口

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   975 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 20:52 · PVG 04:52 · LAX 12:52 · JFK 15:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.