V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
gridsah
V2EX  ›  程序员

SecureCRT+FX 在 Linux 下的平替是什么?( Linux 下管理 ssh 连接的经验?)

  •  
  •   gridsah · 2023-10-12 22:39:06 +08:00 · 2767 次点击
    这是一个创建于 436 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题。LZ 是 SecureCRT+FX 正版用户。

    一直在规划把工作流迁移到 Linux 下,但是 SecureCRT+FX 在 Linux 下一直找不到平替。

    我的需求总结一下的话就是,我需要管理相当数量的 ssh 连接 (100-200),做好分类,并且让我建立的连接有日志。还有少量的 rdp 连接 (10 个左右),这个自己写点脚本足够了。

    我目前可以想到的解决方案是,把我 SecureCRT 上记录的连接手动转写到 .ssh/config 文件里面,然后写个 shell 脚本来管理这个文件。

    我的工作流还分布在 Emacs 和 FireFox 里面。

    各位来分享一下 Linux 下管理大量 ssh 连接的经验?

    46 条回复    2023-10-22 19:42:25 +08:00
    hefish
        1
    hefish  
       2023-10-12 22:41:02 +08:00
    本论坛不是有大佬撸了个 xterminal 吗,还行的。
    pengtdyd
        2
    pengtdyd  
       2023-10-12 22:48:13 +08:00
    Linux 还需要这个???不是直接 ssh command 就可以了吗?
    kalebroccoli
        3
    kalebroccoli  
       2023-10-12 23:07:30 +08:00
    linux 下同样有 SecureCRT+FX
    wheat0r
        4
    wheat0r  
       2023-10-12 23:13:48 +08:00
    @pengtdyd 你这个是程序员思维,不是运维人员的思维
    salmon5
        5
    salmon5  
       2023-10-12 23:21:19 +08:00
    SecureCRT+SecureFX 有 Ubuntu 20.04/22.04 版
    TabGre
        6
    TabGre  
       2023-10-12 23:37:14 +08:00 via iPhone
    macOS 呢?
    emperinter
        7
    emperinter  
       2023-10-13 00:20:35 +08:00
    terminal?
    LonnyWong
        8
    LonnyWong  
       2023-10-13 00:23:09 +08:00   ❤️ 1
    https://github.com/trzsz/trzsz-ssh
    支持搜索和选择,可以在命名上含有分组名,然后搜索它们。
    LindsayZhou
        9
    LindsayZhou  
       2023-10-13 07:41:43 +08:00   ❤️ 1
    管理配置的话,自己写了个 python 小脚本。
    解析也很简单,碰到一个 "host " 开头就算一个配置,然后从这行的注释 ("#" 分割) 去读定制的东西。
    Host github.com # hide
    HostName github.com
    User git

    Host myhost # group:dev
    HostName 192.168.1.1

    这种 格式。

    前两天刚写的,就不拿出来献丑了,


    要留日志的话,自己写个 alias 就行了。gnu 有个 script , scriptreplay 命令,可以用来记录终端和回放。
    LindsayZhou
        10
    LindsayZhou  
       2023-10-13 07:48:01 +08:00
    justrest
        11
    justrest  
       2023-10-13 08:34:23 +08:00
    求 arm64 版本的 ssh ,试过 xshell ,很多网络设备连接不上,tabby 兼容好一点但是交换机配置中的中文无法正常显示。。。感谢感谢
    shervy
        12
    shervy  
       2023-10-13 08:42:59 +08:00
    xshell 强推,无敌。不接受反驳,反驳的是不会用。
    shervy
        13
    shervy  
       2023-10-13 08:43:28 +08:00
    @shervy #12 Sorry ,楼主问的是 Linux 。当我没回哈
    LonnyWong
        14
    LonnyWong  
       2023-10-13 08:44:38 +08:00
    @justrest electerm ?
    cndns
        15
    cndns  
       2023-10-13 08:47:01 +08:00
    Ansible
    LonnyWong
        16
    LonnyWong  
       2023-10-13 08:50:52 +08:00
    @shervy #12 你没怎么用过其他终端,或者不会用其他终端吧,哈哈
    miaoxiao
        17
    miaoxiao  
       2023-10-13 08:57:17 +08:00
    windterm
    gridsah
        18
    gridsah  
    OP
       2023-10-13 09:11:31 +08:00
    @LonnyWong #8 这个看起来符合我管理上的需求,但是我更偏向于自己造轮子 :b

    @LindsayZhou #9 和我现在的思路差不多。我想要实现的是那种 tui 方向键选定然后按回车键打开链接的那种,有没有啥思路?另外,图炸了
    LonnyWong
        19
    LonnyWong  
       2023-10-13 09:15:26 +08:00
    @gridsah 你也可以 fork 出去自己造
    LindsayZhou
        20
    LindsayZhou  
       2023-10-13 09:22:39 +08:00   ❤️ 1
    @gridsah #18
    bash 写 tui 貌似很麻烦,python 应该也要装第三方库,那还不如用楼上提到的 trzsz-ssh 得了

    如果硬要写代码,golang 看到有个库 https://pkg.go.dev/github.com/kevinburke/ssh_config#Host
    把 Host 类的 EOLComment 解析一下。
    Golang 写 TUI 我喜欢用 https://github.com/charmbracelet/bubbletea

    不过我自己没需求,就没什么动力去写了。

    imgur 估计有什么问题,屏蔽 ip 了?我这边看到正常的。下次直接用链接得了。https://pb.koi.moe/KJ
    LindsayZhou
        21
    LindsayZhou  
       2023-10-13 09:35:50 +08:00   ❤️ 1
    想到是不是可以自定义一下 fzf 做搜索,虽然这算不上 tui ,不过也很像了。

    我也是前两天开始用 fzf 的,效果示例是这样子: https://pb.koi.moe/kk 这个是我在 zsh 里搜索命令历史记录。
    gridsah
        22
    gridsah  
    OP
       2023-10-13 09:46:47 +08:00
    @LonnyWong #19
    @LindsayZhou #20

    我现在的思路是,用 python 自带的 curses 库写一个 tui ,每行根据 .ssh/config 显示一个配置,上下键选定按下 enter 直接调 openssh 建立连接。基本逻辑不是很复杂,最复杂的应该也只是搜索了吧,所以 curses 虽然简陋点但也够用。

    在我的规划里,这个工具应该是一个简单的脚本,最多几百行,而不是一个 project ,所以 tssh 太重了。
    minami
        23
    minami  
       2023-10-13 09:52:06 +08:00
    SecureCRT+FX 不是本来就有 Linux 版吗
    LindsayZhou
        24
    LindsayZhou  
       2023-10-13 09:54:16 +08:00
    @LindsayZhou #21
    233 用 fzf 真就一条命令 https://pb.koi.moe/kl

    ssh $(sshhosts | grep -vE "^\+|^$" | fzf -m | awk '{print $1}')

    https://git.sr.ht/~lindsay/dotfiles/tree/master/item/bin/sshhosts

    上班摸鱼写的,没继续润色了。
    LindsayZhou
        25
    LindsayZhou  
       2023-10-13 09:57:23 +08:00
    @LindsayZhou 续 #24
    忘了去掉 -m 参数了,那个是不用的。然后 fzf 可以不清空整个终端,不过我没找到参数。
    gridsah
        26
    gridsah  
    OP
       2023-10-13 10:01:15 +08:00
    楼上那些说 SecureCRT+FX 有 Linux 版的,我一个正版用户难道不知道吗
    nothingistrue
        27
    nothingistrue  
       2023-10-13 10:04:31 +08:00
    @shervy #12 先看看楼主的连接数,100-200 ,这个量级,xshell 这个贵物是用不起的。
    4kingRAS
        28
    4kingRAS  
       2023-10-13 10:10:10 +08:00
    我看我司运维是有一个跳板机,跳板机上配置好所有公钥,然后直接 ssh 别名,类似 @LindsayZhou 的方法
    LindsayZhou
        29
    LindsayZhou  
       2023-10-13 10:14:08 +08:00
    @LindsayZhou 续 24
    更简陋版:
    ssh $(grep -i "host " .ssh/config | awk '{$1=$1;print}' | fzf | awk '{print $2}')

    ~ 发太多回复被频率限制了 ~
    gridsah
        30
    gridsah  
    OP
       2023-10-13 10:14:46 +08:00
    @4kingRAS #28 公司里也有 jumpserver 。

    但这 100-200 ssh 连接是我自己的机器,只有我自己用,所以我不想耗自己的资源再起跳板机 :p
    自己的嘛,能省就省
    dangyuluo
        31
    dangyuluo  
       2023-10-13 10:19:17 +08:00   ❤️ 1
    为啥不能.ssh/config 文件呢?
    gridsah
        32
    gridsah  
    OP
       2023-10-13 10:24:22 +08:00
    @dangyuluo #31 bro 注意看,100-200 个 ssh 连接的配置信息,这意味着 .ssh/config 里有 100-200 个 Hostname 配置,我可记不住每个连接都有啥样的 Hostname 。这个量级 vim/emacs 浏览一遍都得几分钟。
    LindsayZhou
        33
    LindsayZhou  
       2023-10-13 10:26:27 +08:00   ❤️ 1
    @gridsah #32 ssh_config 有个 include 关键字,可以 glob 模糊匹配

    我一般是有行 include ~/.ssh/config.d/*.conf
    micookie
        34
    micookie  
       2023-10-13 10:29:09 +08:00
    WindTerm
    dangyuluo
        35
    dangyuluo  
       2023-10-13 10:34:31 +08:00   ❤️ 1
    @gridsah 我在前公司管理 CI 的时候,也有四五十个 SSH 机器需要,可能比你少一些但也没有本质区别。.ssh/config 支持 Include 语法,把不同区域的配置放在不同文件里就行了。至于登录日志,我不觉得客户段的登录日志是可信的,还是要在服务器上进行统计,或者由第三方服务统计。
    gridsah
        36
    gridsah  
    OP
       2023-10-13 10:37:24 +08:00
    @LindsayZhou #33
    @dangyuluo #31

    我刚转了 10 条连接的信息到 ssh_config 里面,确实发现有个针对 Host 字段的模糊匹配。100-200 这个量级的连接重新针对 Host 字段的模糊匹配设计命名规则的话,被模糊匹配过滤以后大概有 20 个左右的结果。

    似乎,我不需要脚本了。连接信息的检索和修改 grep 和 sed 就够用。下面要解决的就是日志的问题了。
    gridsah
        37
    gridsah  
    OP
       2023-10-13 10:43:31 +08:00
    @dangyuluo #35
    我才意识到 .ssh/config 有模糊匹配 hhhh
    关于日志,bro ,你说得对。但是这个日志主要是给我自己看的,所以,我信就行 :p
    Lunrry
        38
    Lunrry  
       2023-10-13 10:45:08 +08:00
    @micookie #34 windterm 怎么通过跳板机连接服务器呢
    micookie
        39
    micookie  
       2023-10-13 10:51:32 +08:00

    我没有用过,但是我看有这个功能的。
    @Lunrry
    xiaoz
        40
    xiaoz  
       2023-10-13 10:54:26 +08:00
    本论坛大佬的 https://www.xterminal.cn/
    idblife
        41
    idblife  
       2023-10-13 11:40:23 +08:00
    windterm
    可惜不支持 wayland
    Izual_Yang
        42
    Izual_Yang  
       2023-10-13 11:48:59 +08:00
    @LindsayZhou #20
    如果你只是需要对列表进行选择的话,PECO 就够了 https://github.com/peco/peco
    LindsayZhou
        43
    LindsayZhou  
       2023-10-13 12:50:24 +08:00
    @Izual_Yang #42
    我看到了一条 peco 和 fzf 比较的 issue: https://github.com/peco/peco/issues/422

    我开始用 fzf 是 Emacs 有个插件依赖了(具体忘了哪个了)。现在 zsh 的文件补全和历史搜索也用它。既然有了就直接用 fzf 吧。
    gearfox
        44
    gearfox  
       2023-10-13 14:11:43 +08:00
    scrt-sfx-9.4.1-3102.ubuntu22-64.x86_64.deb
    mxq0923
        45
    mxq0923  
       2023-10-17 10:43:20 +08:00
    通过 assh 生成 ssh_config ,通过 fzf 模糊搜索登录
    justrest
        46
    justrest  
       2023-10-22 19:42:25 +08:00 via Android
    @LonnyWong linux 的 electerm 好像没有支持 arm64 的,求下载地址🙏
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2758 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 09:37 · PVG 17:37 · LAX 01:37 · JFK 04:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.