慣性聚合 高效追蹤和閱讀你感興趣的部落格、新聞、科技資訊
閱讀原文 在慣性聚合中打開

推薦訂閱源

小众软件
小众软件
博客园 - 叶小钗
有赞技术团队
有赞技术团队
大猫的无限游戏
大猫的无限游戏
博客园_首页
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
L
LangChain Blog
Hugging Face - Blog
Hugging Face - Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
aimingoo的专栏
aimingoo的专栏
Blog — PlanetScale
Blog — PlanetScale
爱范儿
爱范儿
T
Tailwind CSS Blog
Jina AI
Jina AI
量子位
Stack Overflow Blog
Stack Overflow Blog
人人都是产品经理
人人都是产品经理
J
Java Code Geeks
V
Visual Studio Blog
月光博客
月光博客

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Кто решает судьбу вашего проекта? Разбираем заинтересованные стороны. BABOK #1 Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как Фалькон Тех меняет пространство к лучшему
由於我沒能在macOS上找到WinSSHTerm的正常替代品,一氣之下就自己寫了一個。
bekhzad-kham · 2026-05-28 · via Все публикации подряд на Хабре

難度等級簡單

閱讀時間4分鐘

覆蓋範圍與讀者1.2K

TL;DR

在轉移到macOS後,我沒有找到像WinSSHTerm那樣方便地滿足我日常使用場景的SSH客戶端。
厭倦了不斷的妥協,制定了需求,組裝了自己的客戶端,並將程式碼開源。

倉庫

背景

如果你同時管理多台伺服器,幾乎任何SSH客戶端「某種程度上」都能勝任。
如果你每天要處理數十甚至數百台主機,那麼重要的不再是幻燈片上的功能,而是速度與可預測性:

  • 多快能找到所需的主機;

  • 連線前需要多少步驟;

  • 管理環境結構的方便程度;

  • 應用程式在活躍使用一個月後的表現如何。

在 Windows 上,WinSSHTerm 在這方面長久以來一直幫了我大忙。
轉換到 macOS 後,我原本預期能在一晚內找到替代品,但沒成功。

現有解決方案中哪些不滿意

我沒有尋找「理想」。我在尋找一個不妨礙工作的工具。
問題在客戶之間重複出現:

  1. 到達會話的路徑太長
    主要場景應該很快,但常常淹沒在多餘的點擊中。

  2. 大量主機的組織性薄弱
    當你有很多環境和專案時,沒有正常的群組、標籤和搜尋,一切都會變成混亂。

  3. 過載的介面
    美觀的面板和「豐富的UI」常常損害了應用程式被打開的目的:連線和工作。

  4. 不便的設定可攜性
    希望有透明的配置,易於儲存、搬遷和版本控制。

經過幾週的測試,我發現自己花在對付工具上的時間比解決問題還多。

為什麼決定自己寫

原因不是「周圍的一切都做得很差」。
我坐下來明確列出我認為必須滿足的條件:

  • 啟動和連接盡可能快;

  • 按名稱/IP/標籤搜尋;

  • 按環境和項目的群組結構;

  • 常用操作的快捷鍵;

  • 可預測的配置存儲;

  • 最少的視覺噪音;

  • 在主機列表很大時穩定的行為。

此後便明白:與其無止盡地遷就別人的妥協,不如自己打造一套工具。

客戶端架構所依據的原則

1) 本地優先

主要操作應快速且不依賴網路。
主機與連線資料存放在本地,UI 不需等待「外部服務」即可開啟清單。

2) 更快連線

任何功能都通過一個問題來評估:它是否加速了通往活躍工作階段的路径?
如果不是——就放入待辦清單。

3) 可預測性比「魔法」更重要

寧可少一些「自動智能化」,但要有清晰且可控的邏輯。

4) 配置即資產

配置應該滿足:

  • 人類可讀;

  • 可供備份;

  • 可跨機器攜帶;

  • 適合 Git 使用。

架構(高層級)

我將應用程式劃分為數個獨立層級:

  1. UI Layer(UI 層)
    主機列表、搜尋、篩選、連線卡片、快速操作。

  2. Session Layer(連線層)
    SSH 連線的生命週期:啟動、重新連線、結束、狀態。

  3. 配置層
    配置(主機、群組、標籤、預設)的讀取/驗證/遷移。

  4. 儲存層
    用於服務資料的本地儲存(例如,最近/最愛/歷史)。

  5. 整合層
    與系統SSH和macOS環境的互動。

這使得UI邏輯與連接不會混在一起,並且在更改設定格式時不會破壞一切。

真正有幫助的資料模型

起初嘗試了簡化的「主機清單(список хостов)」模型。
很快就清楚了:隨著基礎設施的增長,需要一個正常的結構。

基本實體:

  • 主機(Host)
    名稱,地址,端口,用戶,auth參數,元數據。

  • 群組
    邏輯分組(例如, 生產, 暫存, 客戶端/*)

  • 標籤
    橫向截面 (k8s, 資料庫 (db), 關鍵的, 遺產)。

  • 個人資料
    可重複使用的連接參數。

  • SessionPreset
    會話行為的預先設定。

正是組合 group + tags + search 在實踐中帶來了最大的速度提升。

產生最大效果的UX設計方案

  1. 預設聚焦於搜尋
    打開客戶端,即可立即列印與篩選。

  2. 鍵盤快速操作
    鍵盤與滑鼠之間切換越少,工作週期越快。

  3. 最近與收藏的主機
    頻繁的連線應一步完成。

  4. 最少彈出視窗
    彈出視窗會拖慢流程。我只在必要時使用它們。

  5. 穩定的資訊層次結構
    相同類型的資訊總是在同一個地方。

安全與運行

我單獨列出了那些經常被推遲的「以後再做」的基礎事項:

  • 不要將私鑰存儲在應用程式內部;

  • 使用SSH系統機制;

  • 明確顯示正在連接到哪個主機/環境;

  • 避免危險的預設值;

  • 僅記錄診斷所需的內容,不洩漏敏感資料。

這並不能讓客戶端「絕對安全」(這種情況不存在),但消除了「方便但有風險」這類典型錯誤。

最困難的是什麼

  1. 放棄多餘的功能
    添加按鈕容易,移除多餘的困難。

  2. 保持簡單與靈活性的平衡
    做到「既簡單又強大」而不必大雜燴——這是迭代的結果,而非一次設計。

  3. 將小細節優化到便利
    最「看不見」的東西(焦點、標籤頁順序、鍵盤情境)比大型功能解決更多問題。

最終得到了什麼

主要變化不在於「又出現了一個SSH客戶端」。
主要是——日常摩擦消失了:

  • 更快找到所需節點;

  • 切換環境時更少出錯;

  • 不花費注意力在介面上;

  • 在遷移/備份時不必與配置文件鬥爭。

簡而言之:該工具不再是問題的一部分,而是再次成為解決方案的一部分。

路線圖

項目的下一步:

  1. 改進批量操作以處理大型主機群。

  2. 擴展配置的導入/導出功能。

  3. 更靈活的篩選器和保存的視圖。

  4. 打磨長時間運行場景(每天工作數小時)的用戶體驗。

  5. 預設設定中的額外安全檢查。

對於處於類似情況的人

如果你也對 macOS 的現成解決方案不滿意,我建議不要從程式碼開始,而是從日常痛點的檢查清單開始。
當需求被誠實地提出時,就會清楚:是繼續尋找還是自己編寫。

在我的情況下,答案是後者。

儲存庫