linux配置ssh,亲测简单可用
⚠️ 重要警告与准备
- 你将失去远程连接:在卸载 SSH 服务后,当前的所有 SSH 连接会保持,但新的连接将无法建立。如果你正在通过 SSH 远程操作服务器,这一步会非常危险。
- 必须通过本地控制台操作:这个操作必须在服务器的物理控制台、虚拟化管理控制台(如 VMware vSphere, Proxmox VE)或云服务商的网页终端(如 AWS EC2 Instance Connect, Azure Serial Console, 阿里云/腾讯云的 VNC)上进行。不要在唯一的 SSH 会话中执行卸载步骤。
- 备份配置文件(非常重要):在卸载前,备份你当前的 SSH 配置,以便重装后可以恢复。
- 知道root密码:确保你知道 root 用户或具有 sudo 权限的用户的密码,因为重装后可能需要通过本地控制台登录。
第一步:备份当前配置(关键步骤)
在开始任何操作之前,先备份你的 SSH 配置文件和主机密钥。
# 创建一个备份目录
sudo mkdir /root/ssh_backup# 备份主要的配置文件 sshd_config
sudo cp /etc/ssh/sshd_config /root/ssh_backup/# 备份整个 /etc/ssh/ 目录(包含重要的主机密钥)
sudo cp -r /etc/ssh /root/ssh_backup/ssh_full_backup# 备份已授权的密钥文件(如果需要)
sudo cp -r ~/.ssh /root/ssh_backup/ 2>/dev/null || true
sudo cp -r /home/*/.ssh /root/ssh_backup/ 2>/dev/null || true# 将备份包压缩并放到安全的地方(可选)
sudo tar -czvf /root/ssh_backup.tar.gz /root/ssh_backup
第二步:卸载 OpenSSH 服务器
使用你的 Linux 发行版的包管理器来卸载。
对于 Ubuntu / Debian 系统:
# 停止 SSH 服务
sudo systemctl stop ssh# 卸载 openssh-server 包
sudo apt purge openssh-server -y# 移除不需要的依赖包
sudo apt autoremove -y
对于 CentOS / RHEL / Fedora 系统:
# 停止 SSH 服务
sudo systemctl stop sshd# 卸载 openssh-server 包
sudo yum remove openssh-server -y
# 或者使用 dnf (较新版本的 Fedora/RHEL)
# sudo dnf remove openssh-server -y
此时,SSH 服务已被移除,新的远程连接已无法建立。
第三步:重新安装 OpenSSH 服务器
现在通过本地控制台登录系统,执行安装命令。
对于 Ubuntu / Debian 系统:
# 更新软件包列表
sudo apt update# 安装 openssh-server
sudo apt install openssh-server -y
对于 CentOS / RHEL / Fedora 系统:
# 安装 openssh-server
sudo yum install openssh-server -y
# 或者使用 dnf
# sudo dnf install openssh-server -y
第四步:恢复配置并启动服务
安装完成后,恢复你之前备份的配置。
# 1. 恢复主配置文件(如果你有自定义配置)
# 注意:直接覆盖前,先确认新安装的默认配置是否与你备份的配置兼容。
sudo cp /root/ssh_backup/sshd_config /etc/ssh/sshd_config# 或者更安全的方法是:手动将你需要的自定义配置从备份文件合并到新的 /etc/ssh/sshd_config 中。
# 使用 vim 或 nano 编辑新文件,加入你需要的设置(如端口、PermitRootLogin等)。
# sudo vim /etc/ssh/sshd_config# 2. 如果你希望恢复主机密钥(以避免客户端出现“主机密钥更改”的警告),可以恢复整个目录。
# 注意:这会使之前连接过的客户端无法识别,需要删除客户端的 known_hosts 中的旧记录。
# sudo cp -r /root/ssh_backup/ssh_full_backup/* /etc/ssh/# 3. 启动 SSH 服务并设置开机自启
sudo systemctl start ssh # Ubuntu/Debian
# sudo systemctl start sshd # CentOS/RHELsudo systemctl enable ssh # Ubuntu/Debian
# sudo systemctl enable sshd # CentOS/RHEL# 4. 检查服务状态,确认它正在运行
sudo systemctl status ssh # Ubuntu/Debian
# sudo systemctl status sshd # CentOS/RHEL
第五步:配置防火墙(如果需要)
如果系统防火墙是开启的,你需要放行 SSH 端口(默认为 22)。
对于 UFW (Ubuntu/Debian):
sudo ufw allow ssh
# 或者指定端口,例如如果你修改了默认端口为 2222
# sudo ufw allow 2222/tcp
对于 firewalld (CentOS/RHEL/Fedora):
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload
对于 iptables:
# 放行 22 端口
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 然后保存 iptables 规则(方法因发行版而异)
第六步:测试连接
从另一台机器尝试 SSH 连接到该服务器,验证安装是否成功。
ssh username@your_server_ip
如果连接失败,请检查:
- 服务状态:
systemctl status ssh
- 监听端口:
sudo ss -tlnp | grep :22
- 配置文件语法:
sudo sshd -t
(此命令会检查sshd_config
文件的语法是否正确,不会重启服务)
总结:最安全的操作流程
- 通过本地控制台登录(物理控制台、VNC、云终端)。
- 备份:备份整个
/etc/ssh/
目录和sshd_config
。 - 安装新版本:直接安装
openssh-server
,包管理器会处理一切。sudo apt update && sudo apt install openssh-server -y # Debian/Ubuntu
- 手动合并配置:不要直接覆盖新的
sshd_config
,而是用编辑器打开新文件,将备份文件中你修改过的特定配置项(如Port
,PermitRootLogin
,PasswordAuthentication
等)手动添加回去。 - 重启服务:
sudo systemctl restart ssh
- 测试:开一个新的 SSH 会话测试连接,确保成功后再关闭当前的本地控制台会话。
按照这个流程,你可以安全地重新安装 SSH 服务器而不会把自己锁在门外。