alogin – Công cụ quản lý kết nối SSH với TUI, gateway đa hop và kho lưu trữ mã hóa (Go)
(github.com/emusal)Từ đầu những năm 2000, tôi đã tự tạo và sử dụng công cụ tự động hóa SSH cá nhân bằng script Bash + Expect.
Sau 20 năm vá víu, cuối cùng tôi đã viết lại hoàn toàn bằng Go và phát hành mã nguồn mở.
https://github.com/emusal/alogin2
Vấn đề cốt lõi là: khi quản lý hàng chục máy chủ với người dùng, cổng, đường đi gateway và thông tin xác thực
đều khác nhau — tôi muốn dùng thuận tiện mà không phải gõ đầy đủ hostname mỗi lần hoặc lưu mật khẩu
dưới dạng văn bản thuần.
Các tính năng chính:
- TUI (Bubbletea) với tìm kiếm mờ — không cần gõ đầy đủ hostname
- Triển khai gateway đa hop bằng SSH native của Go (không cần ProxyCommand, không cần expect).
NếuAllowTcpForwardingbị tắt ở hop trung gian thì tự động fallback sang chuỗi shell - Lưu trữ thông tin xác thực được mã hóa — mật khẩu được lưu trong macOS Keychain / Linux Secret Service /
file mã hóa age. Tuyệt đối không được ghi vào cơ sở dữ liệu SQLite - Phiên cluster — kết nối đồng thời tới N máy chủ bằng tmux, iTerm2, Terminal.app
- Web UI — terminal xterm.js dựa trên WebSocket + dashboard quản lý máy chủ (
alogin web) - Shell shim — có thể tiếp tục dùng nguyên các lệnh
t,r,s,f,mtrong script cũ chỉ với một dòngsource
Stack sử dụng: Go 1.23, Bubbletea, golang.org/x/crypto/ssh, chi, xterm.js (React)
Phần thú vị nhất khi triển khai là SSH đa hop.
golang.org/x/crypto/ssh có thể dial hop tiếp theo ngay trên phiên hiện có, nên có thể chain N hop mà không cần tiến trình riêng.
Điểm khó là khi bastion trung gian chặn TCP forwarding — cần phát hiện lỗi trong lúc dial và chuyển sang
logic fallback bằng cách shell chaining.
Rất hoan nghênh các câu hỏi hoặc phản hồi về phần triển khai.
4 bình luận
Có hỗ trợ Windows không? huhu
Tôi không có môi trường Windows nên chưa thử được.
Sẽ tốt hơn nếu có ảnh chụp màn hình sử dụng.
Tôi đã thêm ảnh chụp màn hình vào README. Cảm ơn lời khuyên của bạn.