文章目录
- Linxu 配置SSH服务
- 🔑 SSH密钥认证:公钥与私钥的配对游戏
- 🤝 认证的完整流程
- 🎯 角色总结:谁拿公钥,谁拿私钥?
- 1. 安装 SSH 服务
- 2. 配置文件详解
- 2.1. 修改默认端口 (Port)
- 2.2. 禁用 root 用户直接登录 (PermitRootLogin)
- 2.3. 禁用密码认证,强制使用密钥登录 (PasswordAuthentication)
- 2.4. 允许公钥认证 (PubkeyAuthentication)
- 步骤 1: 在客户端生成密钥对 (如果还没有)
- 步骤 2: 将公钥上传到服务器
- 步骤 3: 测试登录
- 2.5. 限制可登录的用户 (AllowUsers)
- 2.6. 其他重要配置
- 3. 使用注意事项与最佳实践
- 4. 故障排除
Linxu 配置SSH服务
SSH (Secure Shell) 是一种加密网络协议,用于在不安全的网络上安全地运行网络服务。最常见的用途是远程登录到系统并进行命令行操作。Linux 上最广泛使用的 SSH 实现是OpenSSH。
🔑 SSH密钥认证:公钥与私钥的配对游戏
SSH密钥认证的核心,是一对数学上相关联的“钥匙”:
- 公钥 (Public Key):可以公开的“锁”。你把它放在目标服务器上,相当于给服务器装上了一把只能由特定私钥打开的锁。
- 私钥 (Private Key):必须保密的“钥匙”。由客户端(这里是JumpServer)持有,用于打开那把锁。
🤝 认证的完整流程
整个认证过程就像是一个“对暗号”的过程:
- 部署公钥(装锁):管理员将JumpServer的公钥,提前部署到目标服务器(192.168.3.2)的 ~/.ssh/authorized_keys 文件中。这相当于在目标服务器上装了一把锁。
- 发起连接(拿钥匙开门):当用户通过JumpServer点击连接时, JumpServer会作为SSH客户端,使用其保管的私钥,向目标服务器发起认证请求。
- 加密与解密(对暗号):
- 目标服务器收到请求后,会生成一个随机字符串(挑战),并用之前部署的公钥进行加密,然后发送给JumpServer。
- JumpServer收到这个加密的字符串后,用自己持有的私钥进行解密。
- 最后,JumpServer将解密后的字符串发回给目标服务器。
- 认证成功(暗号正确):目标服务器将收到的字符串与之前生成的进行比对。如果一致,就证明JumpServer持有正确的私钥,认证成功,连接建立。
🎯 角色总结:谁拿公钥,谁拿私钥?
通过这个过程,我们可以清晰地看到两者的分工:
- 目标服务器 (192.168.3.2):扮演“门”的角色。它只存储公钥(锁),用于验证来访者的身份。
- JumpServer:扮演“钥匙管理员”的角色。它保管着私钥(钥匙),用于开启目标服务器上的锁。
1. 安装 SSH 服务
OpenSSH 通常分为客户端 (ssh) 和服务器 (sshd) 两部分。
Ubuntu / Debian:
# 更新软件包列表sudoaptupdate# 安装 SSH 客户端 (通常默认已安装)sudoaptinstallopenssh-client# 安装 SSH 服务器sudoaptinstallopenssh-serverCentOS / RHEL / Fedora:
# 安装 SSH 客户端和服务端 (在较新版本中,minimal安装可能默认不包含)sudoyuminstallopenssh-server openssh-clients# CentOS/RHELsudodnfinstallopenssh-server openssh-clients# Fedora/RHEL 8+# 启用并启动服务 (安装后通常已自动启动,但可以确认下)sudosystemctlenablesshdsudosystemctl start sshd服务状态检查:
# 检查 SSH 服务状态sudosystemctl statusssh# 对于某些系统(如CentOS),服务名可能是 sshdsudosystemctl status sshd# 如果服务未运行,启动它sudosystemctl startssh# 设置开机自启sudosystemctlenablessh# 重新加载配置sudosystemctl reloadssh# ubuntu22.04版本执行下面两条命令sudosystemctl daemon-reloadsudosystemctl restart ssh.socket# 重启服务sudosystemctl restartssh# 查看ssh监听端口号sudoss-tlnp|grepsshd
2. 配置文件详解
SSH 的主要配置文件位于/etc/ssh/sshd_config。在修改任何配置之前,务必备份原文件!
sudocp/etc/ssh/sshd_config /etc/ssh/sshd_config.baksudovim/etc/ssh/sshd_config关键配置项说明:
2.1. 修改默认端口 (Port)
#Port 22 # 默认端口是 22,注释状态Port56789# 取消注释并修改为一个高端口号(如 56789)注意:修改端口后,防火墙必须放行新端口,且连接时必须指定端口ssh -p 56789 user@hostname。
2.2. 禁用 root 用户直接登录 (PermitRootLogin)
PermitRootLogin no# 强烈建议设置为 no禁用后,先使用普通用户登录,然后通过su或sudo切换为 root,增加一层安全屏障。
2.3. 禁用密码认证,强制使用密钥登录 (PasswordAuthentication)
PasswordAuthentication no# 设置为 no 以禁用密码登录这是最简单的方式,但也是最不安全的,容易遭受暴力破解。开启后使用方式ssh -p 56789 username@server_ip然后输入用户密码。
警告:在确认密钥登录无误之前,切勿将此选项设为no,否则可能把自己锁在服务器外。
2.4. 允许公钥认证 (PubkeyAuthentication)
PubkeyAuthenticationyes# 通常默认就是 yes**更安全:**使用一对加密密钥(公钥和私钥)进行认证。公钥放在服务器上,私钥留在本地客户端。
步骤 1: 在客户端生成密钥对 (如果还没有)
# 使用ed25519:推荐,更安全更短,过程中会提示输入passphrase,加强保护ssh-keygen-ted25519-f/root/.ssh/backup_id# 执行后,会提示你输入密钥的保存路径(默认为 ~/.ssh/backup_id.pub)和密码(passphrase)。# 或者使用rsassh-keygen-trsa-b4096-C"your_email@example.com"# 传统方式# 执行后,会提示你输入密钥的保存路径(默认为 ~/.ssh/id_rsa.pub)。- Passphrase:为私钥再添加一层密码保护,即使私钥文件被盗,也无法直接使用。
步骤 2: 将公钥上传到服务器
如果服务器上没有 authorized_keys 文件,执行ssh localhost正常生成.ssh文件夹和authorized_keys,如果还没有,则使用方式二手动创建复制
# 方式一:ssh-copy-id-i~/.ssh/id_ed25519.pub-pport_number username@server_ip# 方式二(手动):mkdir-p~/.ssh&&chmod700~/.sshecho"粘贴您的公钥内容 here">>~/.ssh/authorized_keys&&chmod600~/.ssh/authorized_keys这会将你的公钥内容追加到服务器上的~/.ssh/authorized_keys文件中。
步骤 3: 测试登录
ssh-pport_number username@server_ip2.5. 限制可登录的用户 (AllowUsers)
AllowUsers user1 user2@192.168.1.100此例只允许用户user1从任何地址登录,以及用户user2只能从 IP192.168.1.100登录。
2.6. 其他重要配置
Protocol2# 只使用更安全的 SSHv2 协议PermitEmptyPasswords no# 禁止空密码登录MaxAuthTries3# 最大认证尝试次数ClientAliveInterval300# 客户端无响应300秒后断开连接ClientAliveCountMax2# 客户端存活检测次数3. 使用注意事项与最佳实践
备份配置:修改
sshd_config前务必备份。测试配置:使用
sshd -t测试配置文件语法是否正确,然后再重载服务。sudosshd-t保持连接:修改关键设置(如端口、禁用密码)时,始终保持至少一个活动的 SSH 连接会话。这样如果新配置导致无法登录,你还可以通过旧的会话来恢复配置。
防火墙规则:任何对 SSH 端口的修改(包括默认的 22),都必须相应地在防火墙(
ufw,firewalld,iptables)中更新规则,放行新的端口。Fail2Ban:安装 Fail2Ban 工具来自动封锁多次尝试 SSH 密码失败的 IP 地址,有效防止暴力破解。使用参考文章:Fail2Ban 工具的使用
更新软件:定期更新系统及 OpenSSH 软件包,以获取安全补丁。参考文章:升级openssh至最新版
禁用不用的算法:对于更高安全要求的环境,可以考虑在
sshd_config中禁用较弱的加密算法、MAC 算法和密钥交换算法。强制选择连接方式::在测试阶段,可以使用命令:
ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no user@hostname,强制使用密码连接,不使用密钥
4. 故障排除
连接被拒绝 (Connection refused):服务未运行或防火墙拦截。
权限太开放 (Permissions are too open):
~/.ssh目录权限应为700,~/.ssh/authorized_keys文件权限应为600。chmod700~/.sshchmod600~/.ssh/authorized_keys调试模式:使用
-v(verbose)参数查看详细的连接过程,对排查问题极有帮助。ssh-v-pport_number user@hostname查看日志:服务器端的 SSH 日志通常位于
/var/log/auth.log(Debian/Ubuntu) 或/var/log/secure(CentOS/RHEL)。