news 2026/7/24 20:54:40

Linxu 配置SSH服务

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linxu 配置SSH服务

文章目录

  • 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)持有,用于打开那把锁。

🤝 认证的完整流程

整个认证过程就像是一个“对暗号”的过程:

  1. 部署公钥(装锁):管理员将JumpServer的公钥,提前部署到目标服务器(192.168.3.2)的 ~/.ssh/authorized_keys 文件中。这相当于在目标服务器上装了一把锁。
  2. 发起连接(拿钥匙开门):当用户通过JumpServer点击连接时, JumpServer会作为SSH客户端,使用其保管的私钥,向目标服务器发起认证请求。
  3. 加密与解密(对暗号):
    • 目标服务器收到请求后,会生成一个随机字符串(挑战),并用之前部署的公钥进行加密,然后发送给JumpServer。
    • JumpServer收到这个加密的字符串后,用自己持有的私钥进行解密。
    • 最后,JumpServer将解密后的字符串发回给目标服务器。
  4. 认证成功(暗号正确):目标服务器将收到的字符串与之前生成的进行比对。如果一致,就证明JumpServer持有正确的私钥,认证成功,连接建立。

🎯 角色总结:谁拿公钥,谁拿私钥?

通过这个过程,我们可以清晰地看到两者的分工:

  • 目标服务器 (192.168.3.2):扮演“门”的角色。它只存储公钥(锁),用于验证来访者的身份。
  • JumpServer:扮演“钥匙管理员”的角色。它保管着私钥(钥匙),用于开启目标服务器上的锁。

1. 安装 SSH 服务

OpenSSH 通常分为客户端 (ssh) 和服务器 (sshd) 两部分。

  • Ubuntu / Debian:

    # 更新软件包列表sudoaptupdate# 安装 SSH 客户端 (通常默认已安装)sudoaptinstallopenssh-client# 安装 SSH 服务器sudoaptinstallopenssh-server
  • CentOS / 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

禁用后,先使用普通用户登录,然后通过susudo切换为 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_ip

2.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. 使用注意事项与最佳实践

  1. 备份配置:修改sshd_config前务必备份。

  2. 测试配置:使用sshd -t测试配置文件语法是否正确,然后再重载服务。

    sudosshd-t
  3. 保持连接:修改关键设置(如端口、禁用密码)时,始终保持至少一个活动的 SSH 连接会话。这样如果新配置导致无法登录,你还可以通过旧的会话来恢复配置。

  4. 防火墙规则:任何对 SSH 端口的修改(包括默认的 22),都必须相应地在防火墙(ufwfirewalldiptables)中更新规则,放行新的端口。

  5. Fail2Ban:安装 Fail2Ban 工具来自动封锁多次尝试 SSH 密码失败的 IP 地址,有效防止暴力破解。使用参考文章:Fail2Ban 工具的使用

  6. 更新软件:定期更新系统及 OpenSSH 软件包,以获取安全补丁。参考文章:升级openssh至最新版

  7. 禁用不用的算法:对于更高安全要求的环境,可以考虑在sshd_config中禁用较弱的加密算法、MAC 算法和密钥交换算法。

  8. 强制选择连接方式::在测试阶段,可以使用命令: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)。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/24 20:53:51

/ 类的可调用对象,是函数式编程的典型应用。 、核心原理 装饰器的核心依赖于 Python 的两个特性: 函数:函数可以作为参数传 ...

类的可调用对象:函数式编程的典型应用与装饰器核心原理 在 Python 编程中,函数式编程思想为我们提供了许多优雅的解决方案。其中,类的可调用对象 和 装饰器 是两个紧密相关的概念。本文将从基础原理出发,结合代码示例,…

作者头像 李华
网站建设 2026/7/24 20:50:59

408-C语言入门基础4

目录 一、数组的概念 二、一维数组 三、二维数组 四、字符数组与字符串 一、数组的概念 数组可以对大量的同类型数据进行处理,是若干个具有相同类型的数据的有序集合。根据存储的数据类型,可将数组分为数值数组、字符串数组、指针数组、结构数组等。…

作者头像 李华
网站建设 2026/7/24 20:50:40

如何在Windows上实现零延迟的实时语音转文字:TMSpeech完整指南

如何在Windows上实现零延迟的实时语音转文字:TMSpeech完整指南 【免费下载链接】TMSpeech 腾讯会议摸鱼工具 项目地址: https://gitcode.com/gh_mirrors/tm/TMSpeech 还在为会议记录手忙脚乱?上网课笔记跟不上老师节奏?TMSpeech是一款…

作者头像 李华
网站建设 2026/7/24 20:46:09

防沉迷新规下的棋牌游戏生存课:从合规底线到竞争优势

棋牌类游戏行业正经历一场深刻的合规变革。防沉迷监管不再只是“接个接口”的技术任务,而是上升到了企业经营战略的高度。对于二级直付通商户而言,谁先理解这一趋势,谁就能在新一轮洗牌中占据主动。一、防沉迷的本质:从“堵”到“…

作者头像 李华