先确认是否已安装openssh-server:ubuntu/debian/kali用sudo apt list --installed | grep openssh-server,rhel/centos用rpm -qa | grep openssh-server;无输出则需安装,有输出可直接启动。

确认系统是否已装 openssh-server
很多 Linux 发行版(如 Ubuntu、Debian、Kali)默认只装了客户端 openssh-client,没装服务端——所以你连 systemctl status ssh 都会报 “unit not found”。别急着改配置,先看有没有服务端包:
-
sudo apt list --installed | grep openssh-server(Debian/Ubuntu/Kali) -
rpm -qa | grep openssh-server(RHEL/CentOS) - 如果无输出,说明真没装,跳到下一步;有输出(如
openssh-server-9.2p1-2),说明已装,可直接启动
安装并启动 sshd 服务(按发行版区分)
不同包管理器命令差异大,混用会失败。别抄错源,也别强行用 rpm 装 deb 包:
- Ubuntu/Debian/Kali:
sudo apt update && sudo apt install openssh-server - RHEL/CentOS 8+:
sudo dnf install openssh-server - RHEL/CentOS 7:
sudo yum install openssh-server - 装完立刻启动:
sudo systemctl start ssh(注意:Kali 和旧版可能用service ssh start) - 检查是否跑起来:
sudo systemctl status ssh→ 看到active (running)才算成功
防火墙和端口必须放行 22
开了服务但连不上?八成是防火墙拦了。SSH 默认走 22 端口,不显式放行等于白开:
- UFW(Ubuntu/Debian):
sudo ufw allow 22或sudo ufw allow ssh - firewalld(RHEL/CentOS):
sudo firewall-cmd --permanent --add-port=22/tcp && sudo firewall-cmd --reload - iptables(老系统):
sudo iptables -I INPUT -p tcp --dport 22 -j ACCEPT,再保存规则 - 虚拟机用户额外注意:VMware/VirtualBox 的网络模式(桥接/NAT)会影响宿主机能否访问该 IP,
ifconfig或ip a看到的192.168.x.x地址才是真实监听地址
root 登录被拒?别乱改 PermitRootLogin
很多教程一上来就让改 /etc/ssh/sshd_config 里的 PermitRootLogin,结果改完重启 sshd 却登不上——因为现代 OpenSSH 默认禁用密码 root 登录,且部分发行版(如 Ubuntu)根本没启用 root 密码。
- 先试普通用户登录:
ssh username@your-ip,成功再说 root - 若真需 root 登录,优先用密钥方式:
PermitRootLogin prohibit-password(允许密钥,禁密码)比yes安全得多 - 改完配置必须重载:
sudo systemctl reload ssh(不是 restart,避免断连) - 改错导致无法连接?别慌——本地终端或 console 还能进,删掉刚加的行,或用
sudo cp /etc/ssh/sshd_config{.bak,}回滚
真正容易卡住的点不在“怎么开”,而在“开了之后谁连得上、凭什么连不上”。IP、端口、防火墙、用户权限、密钥路径、SELinux(RHEL系)、甚至 SSH 客户端版本兼容性,漏一个就白忙活。实操时建议每步后验证一次,比如启动服务后立刻 ss -tlnp | grep :22 确认监听,别等最后连不上才回头查。










