使用 assh 来管理 SSH config

2020-08-17  本文已影响0人  已不再更新_转移到qiita

转自 http://einverne.github.io/post/2020/07/advanced-ssh-config-management.html

经常在国内直连 aws 或者 oracle 的机器时 ssh 连不上,但是通过国内的 VPS 中转就非常快,那这就意味着,我每一次连接国外的机器时必须先登录腾讯云的机器,然后在从腾讯云的机器上连过去,有些麻烦,但那天在 Twitter 上看到有人分享了一个 SSH 管理的命令行工具 assh,大致的看了一下使用简介,通过配置就可以完美的解决这个问题。

ProxyCommand

assh 这个工具就将登录一台机器跳转 SSH 再登录另外一台机器的步骤简化了,assh 使用 lib-ssh 提供的 ProxyCommand 来实现。大部分的公司,或者注重安全的 SSH 访问都会将 SSH 的登录配置管理放到一台堡垒机或者跳板机上,然后通过跳板机再去连接真正的机器。

 +-------+       +----------+      +-----------+
 | Laptop| <---> | Jumphost | <--> | RealServer |
 +-------+       +----------+      +-----------+

比如上面的流程中,可能需要先连接 Jumphost:

ssh -p 222 someone@Jumphost

然后在 Jumphost 上连接 RealServer:

ssh someone@RealServer

如果要简化这个步骤可以使用 SSH 的 -J 选项:

ssh -J someone@Jumphost:222 someone@RealServer

或者可以使用 ProxyCommand:

ssh -o ProxyCommand='ssh -W %h:%p -p 222 someone@Jumphost' someone@RealServer

从 OpenSSH 7.3 开始,还可以使用 ProxyJump,可以通过在 config 文件中配置:

Host RealServer
    HostName 1.2.3.4
    ProxyJump someone@Jumphost:22[, user2@Jumphost2:222]
    User someone

如果有多个 Jumphost 可以直接用逗号分隔接在后面。

上面两个方式都可以直接通过 Jumphost 来直接登录到 RealServer 上。

SSH Config 配置

看一个最基本的 assh.yml 配置:

hosts:
  hosta:
    Hostname: 1.2.3.4

  hostb:
    Hostname: 5.6.7.8
    Gateways: hosta

  hostc:
    Hostname: 9.10.11.12
    Gateways: hostb

  hostd:
    Hostname: 13.14.15.16
    GatewayConnectTimeout: 2
    Gateways:
    - direct
    - hosta

说明:

加速 SSH 会话

OpenSSH 可以复用存在的 TCP 连接,比如在创建了多个 SSH sessions 的时候,可以避免 TCP 创建连接带来的过度开销,修改 vi ~/.ssh/config:

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 30
    ControlMaster auto
    ControlPath ~/.ssh/connection-%r@%h:%p
    ControlPersist 48h

assh

回到 assh 本身,assh 是用 Go 语言编写的一个命令行工具,使用 yaml 格式的配置,可以通过该配置快速生成 ~/.ssh/config 配置,通过几行配置就可以利用 ProxyCommand 来进行 SSH 跳转。

特性

assh 非常小巧,但很强大

Install

go get -u moul.io/assh/v2

Event

assh 支持一些事件,可以用来触发一些操作或者进行通知。

BeforeConnect

BeforeConnect 会在 assh 将要连接到远程 SSH 端口时触发。

OnConnect

OnConnect 会在连接到远端 SSH 端口后被调用。

OnConnectError

OnConnectError 会在 assh 在建立 TCP 连接失败时调用。

OnDisconnect

OnDisconnect 会在 assh socket 断掉后触发。

BeforeConfigWrite

BeforeConfigWrite 会在 assh 重写 ~/.ssh/config 时触发。

基础命令

assh config

# 生成 SSH 配置文件
assh config build
assh config build > ~/.ssh/config
# 搜索 hosts
assh config search <keywords>

# 列出配置
assh config list
# 可视化显示
assh config graphviz

assh sockets

# 列出活跃的连接
assh sockets list
# create a master control sockets
assh sockets master
# close active control sockets
assh sockets flush

assh ping

# send packets to the SSH server
assh ping -c 4 host

参考:

https://github.com/moul/assh

https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Proxies_and_Jump_Hosts

上一篇下一篇

猜你喜欢

热点阅读