- 工信部备案号 滇ICP备05000110号-1
- 滇公网安备53011102001527号
- 增值电信业务经营许可证 B1.B2-20181647、滇B1.B2-20190004
- 云南互联网协会理事单位
- 安全联盟认证网站身份V标记
- 域名注册服务机构许可:滇D3-20230001
- 代理域名注册服务机构:新网数码
- CN域名投诉举报处理平台:电话:010-58813000、邮箱:service@cnnic.cn
SSH + tmux:Linux运维指南
欢迎来到蓝队云技术小课堂,每天分享一个技术小知识。
SSH简直就是 Linux 世界的万能钥匙——远程登录、文件传输、端口转发,甚至连翻墙都能干。再加上 tmux 这对黄金搭档,基本上就能实现"连上就不掉"的运维终极体验。
今天咱们就来好好聊聊SSH,从基础配置到各种骚操作,保证你看完之后对SSH的认识能提升一个档次。
一、SSH 到底是个啥
SSH 全称 Secure Shell,翻译成人话就是"安全的远程连接协议"。你想想,在没有 SSH 的年代,大家用的是 telnet,所有数据——包括你的密码——都是明文传输的。随便找个抓包工具,密码就裸奔在路上了。
SSH 出现之后,一切通信都经过加密,中间人想偷看?门都没有。
SSH 的客户端和服务器端分别是:
客户端: ssh (OpenSSH-client)
服务器: sshd (OpenSSH-server)
二、SSH 配置文件详解
SSH 的配置文件主要两个,别搞混了:
客户端配置:~/.ssh/config
服务器配置:/etc/ssh/sshd_config
先看服务器端的重要参数,这些决定了你的 SSH 服务长什么样:
Port 22 — 监听端口。说实话,改端口是最基础的安全措施,改成 2222 之类的能挡住一大半脚本小子。
PermitRootLogin yes/no/prohibit-password — 允许 root 登录不。强烈建议改成 no 或者 prohibit-password,root 密码被爆破的风险太大了。
PasswordAuthentication yes/no — 密码登录开关。用了密钥登录之后果断改成 no,彻底关掉密码认证。
PubkeyAuthentication yes — 密钥认证开关,这个必须开。
MaxAuthTries 6 — 最大认证尝试次数。改成 3 就够了,多了纯属浪费。
LoginGraceTime 120 — 登录超时时间(秒)。超过这个时间没完成认证就断开。
ClientAliveInterval 300 — 服务器每 300 秒给客户端发个心跳包,防掉线用的。
ClientAliveCountMax 3 — 心跳包连续 3 次没回应就踢掉。
AllowUsers user1 user2 — 白名单,只允许指定用户登录。这个配合 DenyUsers 非常好用。
三、SSH 免密登录(密钥登录)
每次连服务器都要输密码?那也太烦了。免密登录的原理其实很简单:用非对称加密。你在本地生成一对密钥——公钥和私钥。公钥放到服务器上,私钥自己留着。连的时候,服务器用公钥验证你的身份,对上了就放行。
具体操作步骤,三句话搞定:
第一步,生成密钥对:
ssh-keygen -t ed25519 -C "your_email@landui.com"
这里推荐用 ed25519 算法,比 rsa 更快更安全。一路回车就行,想加密码保护也可以(不过那就不是完全"免密"了)。
第二步,把公钥发送到服务器:
ssh-copy-id user@remote-server
这步需要输入一次密码,之后公钥就自动添加到服务器的 ~/.ssh/authorized_keys 里了。
第三步,直接连:
ssh user@remote-server
搞定,再也不用输密码了。
再补充一个客户端配置的技巧。编辑 ~/.ssh/config,可以给服务器起别名:
Host myserver
HostName 192.168.1.100
User root
Port 2222
IdentityFile ~/.ssh/id_ed25519
配置好之后,只需要输入 ssh myserver 就能连上去,多爽。
四、SSH 端口转发(三种转发详解)
说到端口转发,很多同学都听说过,但真正理解的人不多。说实话,这个功能才是 SSH 最"魔法"的地方。它能让你打通各种网络孤岛,实现各种看似不可能的连接。
4.1 本地转发(Local Forwarding) -L
场景是这样的:你本地有一台机器 A,远程有一台服务器 B,B 后面还有一台数据库服务器 C(C 只能被 B 访问)。你想从 A 直接访问 C 的数据库,怎么办?
本地转发就能解决这个问题。原理是:在 A 上开一个本地端口,所有发到这个端口的数据,都会通过 SSH 隧道送到 C 上。
ssh -L [本地端口]:[目标主机]:[目标端口] user@跳板机
举个实际的例子:
ssh -L 3307:localhost:3306 dbadmin@remote-server
这个命令的意思是:在你本地打开 3307 端口,所有访问 3307 的请求都会被转发到 remote-server 的 3306 端口。你本地用 MySQL 客户端连 127.0.0.1:3307,实际连上的是远程服务器的 MySQL。
再比方说你想访问内网的 Web 管理界面:
ssh -L 8080:10.0.0.5:80 jump@bastion-host
打开浏览器访问 localhost:8080,你就看到内网那台 10.0.0.5 的网页了。全程加密,谁也看不到。

4.2 远程转发(Remote Forwarding) -R
本地转发是"把远程的服务拉到本地",远程转发正好反过来——"把本地的服务推到远程"。
什么场景需要用这个?你想想:你在家里有一台 NAS 或者测试服务器,但你在外网访问不到它(没有公网 IP)。这时候你在公司的一台有公网 IP 的服务器上开远程转发,就能从公司直接访问家里的服务了。
ssh -R [远程端口]:[本地主机]:[本地端口] user@公网服务器
具体操作:
ssh -R 9090:localhost:8080 user@public-server
执行完这个命令后,任何访问 public-server:9090 的人,实际上访问的是你本地的 8080 端口。
有个坑要注意:默认情况下,远程转发的端口只绑定在远程服务器的 localhost 上,外面是访问不到的。要想让其他机器也能访问,需要在服务器的 sshd_config 里加上:
GatewayPorts yes
4.3 动态转发(Dynamic Forwarding) -D
动态转发是三个里面最骚的。它会把你本地变成一个 SOCKS5 代理服务器,所有走这个代理的流量,都通过 SSH 服务器出去。
ssh -D [本地代理端口] user@远程服务器
实际操作:
ssh -D 1080 user@remote-server
连上之后,你本地就有一个 SOCKS5 代理运行在 127.0.0.1:1080。浏览器设置这个代理,你的所有网页浏览流量都会通过远程服务器出去。
和本地转发的区别在哪?本地转发需要指定具体的目标主机和端口,一对一定制;动态转发不用指定目标,它是一个通用的 SOCKS 代理,你想访问哪个远程服务都行。相当于本地转发是专线,动态转发是万能钥匙。
总结一下三种转发的区别:
• -L 本地转发:把远程服务拉到本地,你连本地端口 = 连远程服务
• -R 远程转发:把本地服务推到远程,别人连远程端口 = 连你的服务
• -D 动态转发:在本地开一个 SOCKS5 代理,万能转发
五、tmux:终端里的"永动机"
说完了 SSH,再来聊聊它的好搭档 tmux。这玩意儿的全称是 Terminal Multiplexer——终端复用器。名字听起来有点高大上,说白了就是:让你在一个终端窗口里开多个终端,而且即使 SSH 断开了,你跑的命令也不会中断。
你想想这个场景:你在服务器上跑一个需要 3 小时的数据同步,结果家里路由器重启,SSH 断了……如果没有 tmux,这个任务就废了,得从头再来。有了 tmux,任务继续在后台跑,你重新连上去 attach 一下,一切照旧。
5.1 tmux 的核心概念
tmux 有三个层级,搞懂了就不晕:
• Session(会话):最大单位,相当于一个工作台。你可以有多个会话,每个会话独立运行
• Window(窗口):会话里的标签页,类似浏览器的 tab
• Pane(窗格):窗口里的分屏,一个窗口可以上下左右切分成多个窗格
5.2 常用命令
创建会话:
tmux new -s mywork
列出所有会话:
tmux ls
重新连接会话:
tmux attach -t mywork
分离当前会话(不终止):
按下 Ctrl+b 然后按 d(detach 的意思)
杀掉一个会话:
tmux kill-session -t mywork

5.3 窗口和窗格操作
所有 tmux 的操作都以 Ctrl+b 为前缀,就是先按 Ctrl+b 松开,再按下一个键:
窗口操作:
• Ctrl+b + c:创建新窗口
• Ctrl+b + n:下一个窗口
• Ctrl+b + p:上一个窗口
• Ctrl+b + 数字:跳到第 N 个窗口
• Ctrl+b + w:列出所有窗口,用方向键选择
窗格操作(分屏):
• Ctrl+b + %:左右分屏
• Ctrl+b + ":上下分屏
• Ctrl+b + 方向键:在窗格间切换
• Ctrl+b + z:当前窗格全屏,再按一次恢复
• Ctrl+b + x:关闭当前窗格
5.4 tmux 配置文件
默认的 tmux 前缀键 Ctrl+b 按起来有点别扭,我建议改成 Ctrl+a,跟 screen 保持一致。创建 ~/.tmux.conf:
# 改前缀键为 Ctrl+a
set -g prefix C-a
unbind C-b
bind C-a send-prefix
# 启用鼠标支持
set -g mouse on
# 窗口编号从 1 开始
set -g base-index 1
# 256 色支持
set -g default-terminal "screen-256color"
# 历史记录增加到 50000 行
set -g history-limit 50000
改完配置后,在 tmux 里执行 Ctrl+b 然后按 :source-file ~/.tmux.conf 就能热加载。
六、SSH + tmux 实战配合
SSH 和 tmux 搭配起来用,才是真正的"远程运维终极方案"。
场景一:跑长时间任务不怕断线
这是最常见的用法。连上服务器,先开 tmux:
ssh user@server
tmux new -s backup
# 在 tmux 里跑你的长时间任务
# 然后 Ctrl+b, d 分离
# 即使 SSH 断开,任务照常跑
下次再连上来:ssh user@server 然后 tmux attach -t backup,一切恢复如初。
场景二:多人协作同一个 tmux 会话
tmux 支持多人同时连接同一个会话,相当于"结对编程"的终端版本:
# A 创建会话
tmux new -s pair
# B 连入同一个会话
tmux attach -t pair
两个人看到完全一样的终端界面,谁输入的命令另一个人实时能看到。远程排障特别好用。
场景三:SSH 连接自动进 tmux
如果你想在每次 SSH 连上去的时候自动进入 tmux(没有就创建,有就恢复),可以在服务器的 ~/.bashrc 里加上:
# 如果是 SSH 登录且不在 tmux 里,自动 attach 或创建
if [ -n "$SSH_CONNECTION" ] && [ -z "$TMUX" ]; then
tmux attach -t default 2>/dev/null || tmux new -s default
fi
这样每次 SSH 登录,自动进入一个叫 default 的 tmux 会话。断开重连,自动回到原来的状态。用一次就回不去了。
七、SSH 进阶小技巧
跳板机一键直达:
内网机器要通过跳板机访问?不用手动两步走,配置 ProxyJump 一步到位:
Host inner-server
HostName 10.0.0.50
User admin
ProxyJump jump-host
直接 ssh inner-server,自动通过 jump-host 跳过去。
SSH 连接复用:
反复连同一台服务器,每次都要重新握手?用 Connection Multiplexing 加速:
Host *
ControlMaster auto
ControlPath ~/.ssh/control-%r@%h:%p
ControlPersist 600
第一次连接建立主控通道,后续连接复用这个通道,速度快到飞起。
SCP 文件传输:
# 上传
scp local_file user@remote:/path/
# 下载
scp user@remote:/path/file .
# 递归复制
scp -r local_dir user@remote:/path/
蓝队云官网上拥有完善的技术支持库可供参考,大家可自行查阅,更多技术问题,可以直接咨询。同时,蓝队云整理了运维必备的工具包免费分享给大家使用,需要的朋友可以直接咨询。
更多技术知识,蓝队云期待与你一起探索。
售前咨询
售后咨询
备案咨询
二维码

TOP