SSH 完整配置指南(Debian 11 / 腾讯云服务器) 本文档面向从零开始配置 SSH 的新手,涵盖服务器端创建用户、修改配置、密钥登录, 以及客户端连接的全流程。 适用系统:Debian 11 (Bullseye) / Ubuntu 20.04+ 适用平台:腾讯云 CVM / 任何支持 SSH 的 Linux 服务器 倾听风雨著 2026-07-31 更多教程请去网址:https://blog.qtfyu.top/ ============================================================================= 目 录 ============================================================================= 1. 前置检查:确认 SSH 服务状态 2. 创建普通用户(禁止 root 登录) 3. 修改 SSH 配置文件 4. 防火墙与安全组 5. 客户端连接测试 6. 密钥登录(比密码更安全) 7. 高级配置选项 8. 故障排查 9. Windows 安装 SSH 客户端 10. 删除用户 11. 完整命令速查表 ============================================================================= 1. 前置检查:确认 SSH 服务状态 ============================================================================= 1.1 检查 SSH 是否运行 ---------------------------------------- sudo systemctl status ssh 输出解读: ● ssh.service - OpenSSH server Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2026-07-13 02:55:39 UTC; 5min ago Active: active (running) → SSH 服务正在运行 Loaded: ... enabled → 开机自启动已启用 vendor preset: enabled → 系统默认就启用了 如果显示 inactive(未运行): # 安装 OpenSSH 服务端(Debian 默认已装) sudo apt update sudo apt install openssh-server # 启动并设置开机自启 sudo systemctl enable ssh --now # 再次检查 sudo systemctl status ssh 注:-now 是 --now 的简写,等价于先 enable 再 start,一步完成。 ============================================================================= 2. 创建普通用户(禁止 root 登录) ============================================================================= 2.1 为什么不能用 root 登录? ---------------------------------------- - root 是超级管理员,权限过大,误操作会直接毁掉系统 - root 用户名是公开的,黑客扫描时第一个尝试的就是 root + 弱密码 - 日志审计困难,所有 root 操作混在一起,无法区分是谁干的 2.2 创建用户 ---------------------------------------- sudo adduser qtfy 交互过程: Adding user 'qtfy' ... Adding new group 'qtfy' (1000) ... Adding new user 'qtfy' (1000) with group 'qtfy' ... Creating home directory '/home/qtfy' ... Copying files from '/etc/skel' ... New password: ← 输入密码(不显示字符) Retype new password: ← 再次输入确认 passwd: password updated successfully Changing the user information for qtfy Full Name []: ← 按回车跳过 Room Number []: ← 按回车跳过 Work Phone []: ← 按回车跳过 Home Phone []: ← 按回车跳过 Other []: ← 按回车跳过 Is the information correct? [Y/n] ← 按回车确认(默认 Y) 命令详解: adduser 交互式创建用户,自动创建家目录、复制配置文件,更友好,推荐新手使用 useradd 底层命令,只创建用户条目,不创建家目录,需要额外参数 -m 才创建家目录 adduser 自动做了什么: - 创建用户账户 /etc/passwd - 创建用户组 /etc/group - 创建家目录 /home/qtfy - 从 /etc/skel 复制默认配置文件(如 .bashrc) - 设置密码 2.3 赋予 sudo 权限 ---------------------------------------- sudo usermod -aG sudo qtfy 参数详解: -a --append 追加到组,而不是覆盖原有组 -G --groups 指定要加入的附加组 sudo Debian 中拥有 sudo 权限的默认组 ⚠️ 警告:如果不加 -a,-G 会覆盖用户的所有附加组,导致用户从其他组中被移除。 验证 sudo 权限: su - qtfy # 切换到 qtfy 用户 sudo whoami # 测试 sudo # 输出:root(表示 sudo 生效) exit # 返回 root ============================================================================= 3. 修改 SSH 配置文件 ============================================================================= 3.1 打开配置文件 ---------------------------------------- sudo nano /etc/ssh/sshd_config sshd_config 是 SSH 服务端(daemon)的配置文件。 还有一个 ssh_config 是客户端配置,不要搞混。 3.2 关键配置项详解 ---------------------------------------- ① Port —— 修改监听端口 # 找到这行(默认被注释) #Port 22 # 修改为(1024-65535 之间任意未占用端口) Port 2222 Port 22 默认端口,全球扫描器都在扫这个端口 Port 2222 常见替代端口,仍有一定扫描量 Port 49152 动态/私有端口范围,扫描量更低 查看端口是否被占用:sudo ss -tlnp | grep 2222 ② PermitRootLogin —— 是否允许 root 登录 # 找到这行 #PermitRootLogin prohibit-password # 修改为 PermitRootLogin no yes 允许 root 用密码或密钥登录(最危险) no 完全禁止 root 登录(推荐) prohibit-password 允许 root 用密钥登录,禁止密码登录 without-password 同 prohibit-password(旧写法) forced-commands-only 只允许 root 执行预定义命令 ③ PasswordAuthentication —— 是否允许密码登录 PasswordAuthentication yes 初始配置阶段建议 yes,先确保能用密码连上,再配密钥 密钥配好后建议 no,关闭密码,只接受密钥登录 先配好密钥并测试成功,再改 no。否则可能把自己锁在服务器外。 ④ PubkeyAuthentication —— 是否允许密钥登录 PubkeyAuthentication yes 默认就是 yes,确保这行没有被注释或改成 no。 ⑤ AllowUsers —— 只允许特定用户登录(可选) AllowUsers qtfy 作用:即使有人知道其他用户名(如 test、admin),也无法通过 SSH 登录。 是最后一道防线。 多个用户:AllowUsers qtfy alice bob ⑥ MaxAuthTries —— 最大尝试次数(防暴力破解) MaxAuthTries 3 连续输错 3 次密码后,当前连接会被断开。 ⑦ ClientAliveInterval —— 保持连接(防超时断开) ClientAliveInterval 60 ClientAliveCountMax 3 每 60 秒发送一次心跳包,连续 3 次无响应才断开。 适合长时间操作(如编译、传输大文件)。 3.3 配置示例(推荐的安全配置) ---------------------------------------- # 基础设置 Port 2222 ListenAddress 0.0.0.0 # 认证设置 PermitRootLogin no PasswordAuthentication yes # 初始阶段用 yes,密钥配好后改 no PubkeyAuthentication yes MaxAuthTries 3 # 可选:只允许特定用户 AllowUsers qtfy # 会话保持 ClientAliveInterval 60 ClientAliveCountMax 3 # 禁用不安全的算法(可选,高级) Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org 3.4 保存并重启 SSH ---------------------------------------- # 检查配置文件语法是否正确(重要!) sudo sshd -t # 无输出 = 语法正确 # 重启 SSH 服务 sudo systemctl restart ssh # 确认重启后状态正常 sudo systemctl status ssh sshd -t 是测试模式,只检查语法不启动服务。 如果配置有错,它会报错并拒绝重启,避免把自己锁在外面。 ================================================================================ 4. 防火墙与安全组 ================================================================================ 4.1 服务器本地防火墙(ufw) ---------------------------------------- # 安装 ufw(Debian 默认可能没装) sudo apt install ufw # 默认策略:拒绝所有入站,允许所有出站 sudo ufw default deny incoming sudo ufw default allow outgoing # 放行 SSH 端口(如果你改成了 2222) sudo ufw allow 2222/tcp # 如果还开了其他服务(如 HTTP) sudo ufw allow 80/tcp sudo ufw allow 443/tcp # 启用防火墙 sudo ufw enable # 查看状态 sudo ufw status verbose ufw 常用命令: sudo ufw allow 2222/tcp 放行 TCP 2222 端口 sudo ufw allow from 192.168.1.0/24 to any port 2222 只允许特定网段访问 sudo ufw delete allow 2222/tcp 删除规则 sudo ufw disable 临时关闭防火墙 sudo ufw reset 重置所有规则 4.2 腾讯云安全组(必须!) ---------------------------------------- 这是云服务商层面的防火墙,优先级高于 ufw。 如果安全组没放行,ufw 放行了也连不上。 配置路径: 腾讯云控制台 → 云服务器 CVM → 实例详情 → 安全组 → 入站规则 → 添加规则 来源 0.0.0.0/0(任何 IP)或你的公网 IP 协议端口 自定义 TCP,端口 2222(或你设的端口) 策略 允许 备注 SSH 远程登录 ⚠️ 建议:来源不要写 0.0.0.0/0,改成你当前网络的公网 IP(查 IP:ip.sb)。 这样只有你能连,大幅降低被扫描风险。 ================================================================================ 5. 客户端连接测试 ================================================================================ 5.1 Windows(PowerShell / CMD) ---------------------------------------- # 基础连接 ssh -p 2222 qtfy@你的服务器公网IP # 示例 ssh -p 2222 qtfy@123.456.78.90 首次连接提示: The authenticity of host '[123.456.78.90]:2222' can't be established. ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxx. Are you sure you want to continue connecting (yes/no/[fingerprint])? 输入 yes 回车。这是把服务器的公钥指纹保存到本地 ~/.ssh/known_hosts。 5.2 macOS / Linux ---------------------------------------- ssh -p 2222 qtfy@你的服务器公网IP 5.3 常用 SSH 客户端参数 ---------------------------------------- -p 指定端口 ssh -p 2222 user@ip -i 指定私钥文件 ssh -i ~/.ssh/id_ed25519 user@ip -v 详细模式(排查问题) ssh -v user@ip -vv 更详细 ssh -vv user@ip -N 不执行远程命令(只做端口转发) ssh -N -L ... -L 本地端口转发 ssh -L 8080:localhost:80 user@ip ============================================================================= 6. 密钥登录(比密码更安全) ============================================================================= 6.1 客户端生成密钥对 ---------------------------------------- Windows(PowerShell): ssh-keygen -t ed25519 -C "qtfy@example.com" macOS / Linux: ssh-keygen -t ed25519 -C "qtfy@example.com" 交互过程: Generating public/private ed25519 key pair. Enter file in which to save the key (/home/qtfy/.ssh/id_ed25519): ← 按回车用默认路径 Enter passphrase (empty for no passphrase): ← 可选:设置密码保护私钥 Enter same passphrase again: Your identification has been saved in /home/qtfy/.ssh/id_ed25519 Your public key has been saved in /home/qtfy/.ssh/id_ed25519.pub 密钥类型选择: ed25519 安全性高,速度最快,现代系统都支持,首选 rsa 安全性高,速度慢,兼容性最广泛,旧系统兼容用 ecdsa 安全性中等,速度中等,不推荐 dsa 安全性低,速度快,已废弃,禁用 私钥密码(passphrase)的权衡: 不设密码:方便,但私钥文件泄露 = 服务器直接沦陷 设密码:每次使用私钥都要输密码,但更安全。可用 ssh-agent 缓存密码 6.2 把公钥传到服务器 ---------------------------------------- 方法一:ssh-copy-id(推荐) ssh-copy-id -p 2222 -i ~/.ssh/id_ed25519.pub qtfy@你的服务器公网IP 输入一次密码后,公钥自动复制到服务器的 ~/.ssh/authorized_keys。 注意:需要通过ssh连接后执行,可能需要sudo权限。 方法二:手动复制 # 本地电脑:复制公钥内容 cat ~/.ssh/id_ed25519.pub # 复制输出的那一长串 # 服务器上(用密码登录后) mkdir -p ~/.ssh chmod 700 ~/.ssh echo "粘贴公钥内容" >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys 6.3 测试密钥登录 ---------------------------------------- ssh -p 2222 qtfy@你的服务器公网IP 如果不需要输密码直接登录成功,密钥配置完成。 6.4 关闭密码登录(密钥确认可用后再执行!) ---------------------------------------- sudo nano /etc/ssh/sshd_config 修改: PasswordAuthentication no ChallengeResponseAuthentication no 重启: sudo systemctl restart ssh ⚠️ 警告:确保密钥能正常使用再关闭密码! 否则会被永久锁在服务器外,只能通过云服务商的 VNC 控制台救回。 6.5 使用 ssh-agent(避免每次输私钥密码) ---------------------------------------- # 启动 ssh-agent eval "$(ssh-agent -s)" # 添加私钥(如果设了 passphrase,这里输一次) ssh-add ~/.ssh/id_ed25519 # 现在连接不需要再输密码 ssh -p 2222 qtfy@你的服务器公网IP Windows 自动启动 ssh-agent: PowerShell 管理员运行: # 确保 ssh-agent 服务自动启动 Get-Service ssh-agent | Set-Service -StartupType Automatic Start-Service ssh-agent ssh-add $env:USERPROFILE\.ssh\id_ed25519 ================================================================================ 7. 高级配置选项 ================================================================================ 7.1 SSH 配置文件(客户端) ---------------------------------------- 在本地电脑创建 ~/.ssh/config(Windows 是 %USERPROFILE%\.ssh\config): Host myserver HostName 123.456.78.90 User qtfy Port 2222 IdentityFile ~/.ssh/id_ed25519 ServerAliveInterval 60 ServerAliveCountMax 3 然后简化为: ssh myserver 7.2 禁止空密码登录 ---------------------------------------- PermitEmptyPasswords no 7.3 设置登录欢迎信息 ---------------------------------------- sudo nano /etc/ssh/sshd_config 添加: Banner /etc/ssh/banner 创建 banner 文件: sudo nano /etc/ssh/banner 写入: ========================================= Authorized access only! All activity may be monitored. ========================================= 7.4 记录详细日志 ---------------------------------------- # 在 sshd_config 中 LogLevel VERBOSE 查看登录日志: sudo tail -f /var/log/auth.log 7.5 使用 fail2ban(自动封禁暴力破解 IP) ---------------------------------------- sudo apt install fail2ban sudo systemctl enable fail2ban --now # 查看被禁 IP sudo fail2ban-client status sshd ================================================================================ 8. 故障排查 ================================================================================ 8.1 连接被拒绝(Connection refused) ---------------------------------------- ssh: connect to host 123.456.78.90 port 2222: Connection refused 排查步骤: 1. 检查 SSH 服务是否运行:sudo systemctl status ssh 2. 检查端口是否监听:sudo ss -tlnp | grep ssh 3. 检查配置文件语法:sudo sshd -t 4. 检查 ufw 是否放行:sudo ufw status 5. 检查腾讯云安全组!(最常见原因) 8.2 权限拒绝(Permission denied) ---------------------------------------- Permission denied (publickey,password). 排查步骤: 1. 用户名是否正确?(不是 root,是你创建的普通用户) 2. 密码是否正确? 3. 如果用了密钥:私钥路径是否正确?ssh -v 查看详细日志 4. 服务器端 ~/.ssh/authorized_keys 权限是否为 600? 5. 服务器端 ~/.ssh 目录权限是否为 700? 8.3 连接超时(Connection timed out) ---------------------------------------- 1. 检查服务器是否开机 2. 检查公网 IP 是否正确 3. 检查安全组是否放行对应端口 4. 检查本地网络是否允许出站到该端口(公司/学校网络可能限制) 8.4 被锁在服务器外(配置错误导致) ---------------------------------------- 救急方法: 1. 登录腾讯云控制台 2. 找到你的服务器 → 点击「登录」→ 使用 VNC/控制台登录 3. 用 root 密码登录(控制台不受 SSH 配置限制) 4. 修复 /etc/ssh/sshd_config 5. sudo systemctl restart ssh ============================================================================= 9. Windows 安装 SSH 客户端 ============================================================================= 9.1 Windows 10 / 11(推荐:内置 OpenSSH) ---------------------------------------- Windows 10(1809 及以上)和 Windows 11 已内置 OpenSSH 客户端, 但默认可能未启用。以下是启用方法: 方法一:图形界面安装 1. 打开「设置」→「应用」→「可选功能」 2. 点击「添加功能」 3. 搜索「OpenSSH 客户端」 4. 勾选并点击「安装」 5. 等待安装完成 方法二:PowerShell 命令安装(管理员) # 检查是否已安装 Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Client*' # 如果 State 显示为 NotPresent,则执行安装 Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0 # 安装完成后验证 ssh -V 验证安装成功: ssh -V # 应输出类似:OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2 9.2 Windows 7 / 8 / 旧版 Windows 10 ---------------------------------------- 这些系统没有内置 OpenSSH,可使用以下替代方案: 方案一:Git for Windows(推荐,自带 Git Bash 和 ssh) 1. 访问 https://git-scm.com/download/win 2. 下载并安装 Git for Windows 3. 安装过程中保持默认选项即可 4. 安装完成后,右键桌面选择「Git Bash Here」 5. 在 Git Bash 中输入:ssh -V 方案二:PuTTY(经典 SSH 客户端) 1. 访问 https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html 2. 下载 putty-64bit-0.xx-installer.msi 3. 安装后打开 PuTTY 4. 在 Host Name 输入服务器 IP 5. 在 Port 输入 2222(或你设置的端口) 6. Connection type 选择 SSH 7. 点击 Open 连接 PuTTY 使用密钥的方法: 1. 打开 PuTTYgen(随 PuTTY 安装) 2. 点击 Generate 生成密钥对 3. 保存私钥(.ppk 文件) 4. 将公钥内容复制到服务器的 ~/.ssh/authorized_keys 5. 在 PuTTY 中 → Connection → SSH → Auth → Private key file 6. 选择你的 .ppk 私钥文件 方案三:MobaXterm(功能强大的终端工具) 1. 访问 https://mobaxterm.mobatek.net/ 2. 下载免费版(Home Edition) 3. 安装后打开,点击 Session → SSH 4. 输入 Remote host 和 Port 5. 点击 OK 连接 9.3 Windows 上使用 SSH 的注意事项 ---------------------------------------- - Windows 的 SSH 配置文件路径:%USERPROFILE%\.ssh\config (例如 C:\Users\你的用户名\.ssh\config) - 首次连接时的 known_hosts 保存在:%USERPROFILE%\.ssh\known_hosts - 如果提示 "WARNING: UNPROTECTED PRIVATE KEY FILE", 需要右键私钥文件 → 属性 → 安全 → 高级 → 禁用继承 → 删除所有用户, 然后只添加当前用户并赋予完全控制权限。 - PowerShell 中使用 ssh 时,参数与 Linux/macOS 完全一致。 ============================================================================= 10. 删除用户 ============================================================================= 10.1 为什么需要删除用户? ---------------------------------------- - 员工离职,需要清理其服务器账户 - 测试账号不再需要 - 发现异常账户,需要立即禁用或删除 - 系统维护,清理无用账户减少攻击面 10.2 查看系统中所有用户 ---------------------------------------- # 查看所有普通用户(UID >= 1000) awk -F: '$3 >= 1000 {print $1}' /etc/passwd # 查看所有用户及其 UID、GID、家目录 cat /etc/passwd # 查看当前在线用户 who w # 查看用户最近登录记录 last 10.3 删除用户(保留家目录) ---------------------------------------- # 使用 deluser(Debian/Ubuntu 推荐,更友好) sudo deluser qtfy # 或使用 userdel(通用命令) sudo userdel qtfy 效果:删除用户账户和组,但保留 /home/qtfy 目录 10.4 删除用户及其家目录 ---------------------------------------- # deluser 加 --remove-home 参数 sudo deluser --remove-home qtfy # userdel 加 -r 参数 sudo userdel -r qtfy 效果:删除用户账户、组、家目录 /home/qtfy,以及邮件池 10.5 彻底清理用户所有痕迹 ---------------------------------------- # 1. 先强制终止该用户的所有进程 sudo pkill -u qtfy sudo killall -u qtfy # 2. 删除用户及其家目录 sudo deluser --remove-home qtfy # 3. 手动检查并删除其他相关文件(如有) sudo rm -rf /var/spool/mail/qtfy # 邮件池(deluser --remove-home 已处理) sudo rm -rf /var/www/html/qtfy # 如有该用户的网站目录 sudo rm -rf /tmp/qtfy* # 临时文件 # 4. 从 sudo 权限中移除(如之前加入过) sudo gpasswd -d qtfy sudo # 5. 检查 crontab 任务 sudo crontab -u qtfy -l # 查看该用户的定时任务 sudo crontab -u qtfy -r # 删除该用户的定时任务 10.6 临时禁用用户(不解删除) ---------------------------------------- # 方法一:锁定密码(用户无法登录,但数据保留) sudo passwd -l qtfy # 解锁 sudo passwd -u qtfy # 方法二:设置账户过期日期为昨天(立即失效) sudo usermod --expiredate 1 qtfy # 恢复账户 sudo usermod --expiredate "" qtfy # 方法三:将用户的 shell 改为 nologin(无法登录但数据保留) sudo usermod -s /usr/sbin/nologin qtfy # 恢复(假设原 shell 是 bash) sudo usermod -s /bin/bash qtfy 10.7 删除用户时的注意事项 ---------------------------------------- ⚠️ 永远不要删除正在使用的用户! - 确保该用户没有正在运行的进程:ps -u qtfy - 确保该用户没有打开的文件:lsof -u qtfy ⚠️ 删除前备份重要数据! - 如果用户家目录有重要文件,先备份: sudo tar czvf /backup/qtfy_backup.tar.gz /home/qtfy ⚠️ 检查该用户是否拥有系统服务! - 某些服务可能以该用户运行,删除前需确认: sudo systemctl list-units --type=service | grep qtfy ⚠️ 不要删除系统内置用户! - UID < 1000 的用户通常是系统账户(如 root, www-data, mysql) - 除非明确知道用途,否则不要删除 ============================================================================= 11. 完整命令速查表 ============================================================================= ---------- 服务器端 ---------- # 检查 SSH 状态 sudo systemctl status ssh # 创建用户 sudo adduser qtfy sudo usermod -aG sudo qtfy # 编辑 SSH 配置 sudo nano /etc/ssh/sshd_config # 关键配置项 Port 2222 PermitRootLogin no PasswordAuthentication yes PubkeyAuthentication yes AllowUsers qtfy # 测试配置语法 sudo sshd -t # 重启 SSH sudo systemctl restart ssh # 防火墙 sudo ufw allow 2222/tcp sudo ufw enable sudo ufw status # 查看登录日志 sudo tail -f /var/log/auth.log # 查看所有用户 awk -F: '$3 >= 1000 {print $1}' /etc/passwd # 删除用户(保留家目录) sudo deluser qtfy # 删除用户及家目录 sudo deluser --remove-home qtfy # 锁定用户 sudo passwd -l qtfy # 强制终止用户进程 sudo pkill -u qtfy ---------- 客户端 ---------- # 生成密钥 ssh-keygen -t ed25519 -C "qtfy@example.com" # 复制公钥到服务器 ssh-copy-id -p 2222 qtfy@IP # 连接 ssh -p 2222 qtfy@IP # 详细模式(排错) ssh -v -p 2222 qtfy@IP # 使用配置文件后简化连接 ssh myserver ---------- Windows 安装 SSH ---------- # 检查 OpenSSH 客户端是否安装 Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Client*' # 安装 OpenSSH 客户端(PowerShell 管理员) Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0 # 验证 ssh -V ============================================================================= 文档版本:2026-07-30 适用系统:Debian 11 (Bullseye) / Ubuntu 20.04+ 适用平台:腾讯云 CVM / 任何支持 SSH 的 Linux 服务器 =============================================================================