谁懂啊家人们,本来想美滋滋SSH连树莓派搞点小项目,结果哐当一个"Port22被占用",直接给整懵圈了😤
Port22可是SSH的"专属工位",它被占了就相当于你工位被人抢了,根本没法开工!今天就用大白话+搞笑风,把这事儿的来龙去脉和解决办法给你唠明白,小白也能秒上手~
一、Port22被占?多半是这几个"老六"在搞鬼
| 捣蛋鬼类型 | 作死行为解说 |
|---|---|
| 1. SSH服务"分身术" | 你手动启动了一次SSH,系统又悄咪咪自动拉起来一个,俩进程搁22端口抢地盘,不打架才怪 |
| 2. 其他程序"鸠占鹊巢" | 手滑把SFTP、内网穿透工具甚至自定义小脚本的端口设成22,直接把SSH的工位给占了 |
| 3. SSH配置"脑子短路" | 改配置文件时手欠写了俩22端口绑定,相当于给SSH安排了俩工位,结果它自己跟自己抢 |
| 4. 端口"占着茅坑不拉屎" | 之前的SSH进程异常闪退,端口还处在"TIME_WAIT"的摆烂状态,死活不释放,新进程根本进不来 |
二、破案第一步:揪出占用22端口的"元凶"
先别急着莽,咱得先搞清楚是谁在霸占工位!直接复制下面命令到树莓派终端,一秒锁定嫌疑人👇
bash
# 方法1:懒人专属(推荐)
sudo lsof -i:22
# 方法2:备用方案(怕有的系统没装lsof)
sudo netstat -tulpn | grep :22
-
举个栗子(重点盯
PID/进程名这俩字段):yamlsshd 1234 root 3u IPv4 12345 0t0 TCP *:22 (LISTEN)翻译一下:如果进程名是
sshd,那就是SSH自己搞分身抢工位;要是显示别的名字(比如random_app),那就是这个野程序占了SSH的坑!
三、专治各种不服!Port22抢回攻略(按优先级来)
1. 最常见情况:干掉SSH的"分身"(治标快准狠)
要是排查后发现是SSH自己搞分身抢端口,直接一套组合拳送走它:
bash
# 先让SSH服务原地歇菜
sudo systemctl stop ssh
# 把残留的捣蛋进程噶了(把1234换成你查到的PID)
sudo kill -9 1234
# 重启SSH,让它规规矩矩上班
sudo systemctl restart ssh
2. 野程序占坑:让它"挪工位"(治本更靠谱)
要是查到是其他程序占了22端口,可别直接噶进程(万一人家是重要程序呢),咱让它换个端口:
- 先找到该程序的配置文件(比如内网穿透工具一般在
/etc目录下) - 把配置里的端口从22改成别的(比如2222、2200这种没人用的)
- 重启该程序,再连SSH就畅通无阻啦
3. 配置文件脑抽:给SSH"修正工位"
要是是配置文件重复绑定22端口,打开SSH配置文件/etc/ssh/sshd_config:
bash
sudo nano /etc/ssh/sshd_config
搜索Port 22,确保整份文件里只保留一个Port 22配置,多余的直接删掉,保存后重启SSH就行。
4. 端口摆烂不释放:给系统"清缓存"
要是端口处于TIME_WAIT状态,咱可以给系统发个"清理指令"(一般重启树莓派就能解决,嫌麻烦也能执行这个):
bash
# 强制释放TIME_WAIT端口(慎用,别乱搞生产环境)
sudo sysctl -w net.ipv4.tcp_tw_recycle=1
sudo sysctl -w net.ipv4.tcp_tw_reuse=1
最后唠两句
其实Port22被占这事儿,说白了就是"工位管理混乱",只要找准元凶,要么噶掉捣蛋进程,要么给程序换工位,都能轻松解决~要是还搞不定,评论区蹲个大佬帮你支招!