5154

Good Luck To You!

CentOS8如何从零开始安装配置SSH服务并实现远程登录?

在现代IT基础设施管理中,远程访问和管理服务器是日常运维的核心环节,对于广受赞誉的企业级操作系统CentOS 8而言,SSH(Secure Shell)协议是实现这一功能的最关键、最安全的基石,它通过加密的通道,允许系统管理员在本地客户端安全地执行命令、管理文件和配置远程服务,有效杜绝了传统明文协议(如Telnet)所带来的窃听和中间人攻击风险,深入理解并熟练掌握CentOS 8上的SSH配置与管理,是每一位系统工程师必备的技能,本文将全面介绍在CentOS 8上安装、配置、强化和使用SSH服务的全过程。

CentOS8如何从零开始安装配置SSH服务并实现远程登录?

理解SSH及其核心价值

SSH,即安全外壳协议,是一种网络协议,用于在不安全的网络中安全地进行远程登录和其他网络服务,其核心价值体现在三个层面:

  1. 加密通信:所有传输的数据,包括用户密码、命令和输出结果,都经过强加密算法(如AES、ChaCha20)的保护,确保数据在传输过程中的机密性和完整性。
  2. 身份认证:SSH提供了多种认证机制,最常用的是密码认证和公钥认证,公钥认证凭借其更高的安全性,已成为生产环境的首选。
  3. 功能多样:SSH不仅限于远程命令行访问,它还构成了安全文件传输(SFTP、SCP)、端口转发(隧道)等高级应用的基础,极大地扩展了远程管理的可能性。

在CentOS 8的生态中,SSH的实现主要通过OpenSSH软件套件,它既是服务器端软件,也是客户端工具。

在CentOS 8上安装并启用SSH服务

CentOS 8系统通常默认安装并启用了OpenSSH服务器,但为了确保其正确运行或进行全新安装,可以遵循以下步骤。

通过SSH客户端或物理控制台登录到你的CentOS 8系统,打开终端,使用dnf包管理器来安装OpenSSH服务器:

sudo dnf install openssh-server -y

安装完成后,需要将sshd服务设置为开机自启,并立即启动它:

sudo systemctl enable sshd
sudo systemctl start sshd

为了确认服务已经成功运行,可以检查其状态:

sudo systemctl status sshd

输出的信息中应包含active (running)字样,并显示服务正在监听的端口(默认为22)。

必须配置防火墙以允许SSH流量通过,CentOS 8默认使用firewalld作为防火墙管理工具,执行以下命令,永久开放SSH服务并重新加载防火墙规则:

sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload

至此,一个基本的CentOS 8 SSH服务器已经搭建完毕,你可以使用ssh username@your_server_ip命令从任何其他网络中的机器进行连接。

优化SSH服务器配置 (sshd_config)

SSH服务器的所有行为都由其主配置文件/etc/ssh/sshd_config控制,为了提升安全性和满足特定需求,我们需要对这个文件进行修改,在进行任何更改之前,建议先备份原始文件:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

使用你喜欢的文本编辑器(如vinano)打开配置文件:

CentOS8如何从零开始安装配置SSH服务并实现远程登录?

sudo vi /etc/ssh/sshd_config

以下是一些关键的配置参数,建议根据实际需求进行调整:

配置参数 默认值 建议值 说明
Port 22 2222 (或其他非标准端口) 更改默认端口可以有效抵御自动化扫描和暴力破解攻击。
PermitRootLogin yes prohibit-passwordno 禁止root用户直接通过密码登录,是提升安全性的重要一步。
PasswordAuthentication yes no (在配置好密钥认证后) 禁用密码认证,强制使用更安全的公钥认证。
PubkeyAuthentication yes yes 确保公钥认证功能开启。
AllowUsers (注释) user1 user2@192.168.1.* 限制只有指定的用户(或来自特定IP的用户)才能通过SSH登录。

修改完配置后,保存文件并退出,为了让更改生效,需要重新加载sshd服务:

sudo systemctl reload sshd

安全强化:部署SSH公钥认证

密码认证容易受到暴力破解,而公钥认证则提供了近乎无懈可击的安全保障,其原理是使用一对加密密钥:私钥保留在客户端,绝不能泄露;公钥则放置在服务器上。

在客户端生成密钥对

在你的本地计算机(Linux、macOS或Windows上的WSL)上,使用ssh-keygen命令生成密钥对,推荐使用RSA或更现代的Ed25519算法。

ssh-keygen -t ed25519 -C "your_email@example.com"

命令执行过程中,会提示你设置保存路径(默认为~/.ssh/id_ed25519)和为私钥设置一个密码,设置密码是一个好习惯,即使私钥文件被盗,攻击者没有密码也无法使用它。

将公钥复制到CentOS 8服务器

生成密钥对后,需要将公钥(~/.ssh/id_ed25519.pub添加到服务器上对应用户的~/.ssh/authorized_keys文件中,最简单的方法是使用ssh-copy-id工具:

ssh-copy-id -i ~/.ssh/id_ed25519.pub username@your_server_ip

该工具会自动处理文件权限和内容追加,手动操作也可以,但需要确保服务器上的~/.ssh目录权限为700,~/.ssh/authorized_keys文件权限为600。

测试并禁用密码认证

尝试使用私钥登录服务器:

CentOS8如何从零开始安装配置SSH服务并实现远程登录?

ssh -i ~/.ssh/id_ed25519 username@your_server_ip

如果登录成功且无需输入密码(或只需输入私钥的密码),说明公钥认证已配置成功,你可以放心地回到/etc/ssh/sshd_config文件,将PasswordAuthentication设置为no,然后重新加载服务,彻底关闭密码登录入口。

基本SSH客户端使用技巧

SSH客户端的使用同样简洁高效,基本的连接命令格式为ssh username@hostname,如果服务器监听在非标准端口,可以使用-p参数指定:

ssh -p 2222 username@your_server_ip

利用SSH,你还可以安全地传输文件。scp(Secure Copy)命令就是一个典型的例子,它基于SSH协议进行文件拷贝:

# 将本地文件拷贝到远程服务器
scp /path/to/local_file.txt username@your_server_ip:/path/to/remote/directory/
# 将远程服务器文件拷贝到本地
scp username@your_server_ip:/path/to/remote_file.txt /path/to/local/directory/

相关问答FAQs

问题1:我修改了SSH的默认端口后,为什么无法连接了?

解答: 这通常是由两个原因导致的,也是最常见的原因,是防火墙规则没有更新,当你将SSH端口从22改为其他端口(例如2222)后,必须相应地在firewalld中开放这个新端口,请执行以下命令:

sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --reload

如果你的CentOS 8系统启用了SELinux(Security-Enhanced Linux),它默认只允许SSH服务在22端口上运行,你需要告诉SELinux允许SSH在新端口上监听:

# 首先安装 semanage 管理工具(如果尚未安装)
sudo dnf install policycoreutils-python-utils
# 将新端口添加到SELinux的SSH端口类型中
sudo semanage port -a -t ssh_port_t -p tcp 2222

完成这两步后,你应该就能通过新端口成功连接了。

问题2:我已经配置了SSH公钥,但登录时系统仍然提示我输入密码,这是为什么?

解答: 这个问题通常与服务器上的文件或目录权限不正确有关,SSH服务对权限要求非常严格,请登录到服务器,检查以下几点:

  1. 用户主目录权限:执行ls -ld /home/username(或你的用户主目录),确保其他用户没有写入权限,权限应为drwxr-xr-x (755) 或更严格。
  2. .ssh目录权限:执行ls -ld /home/username/.ssh,该目录权限必须是drwx------ (700),即只有用户本人有读写执行权限。
  3. authorized_keys文件权限:执行ls -l /home/username/.ssh/authorized_keys,该文件权限必须是-rw------- (600)。 如果权限不正确,可以使用chmod命令修复,chmod 700 ~/.sshchmod 600 ~/.ssh/authorized_keys,也可以使用ssh -v username@server_ip命令在客户端进行详细模式的连接,输出的日志会明确指出认证失败的具体原因,Authentication refused: bad ownership or modes for directory /home/username”。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2026年1月    »
1234
567891011
12131415161718
19202122232425
262728293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
    网站收藏
    友情链接

    Powered By Z-BlogPHP 1.7.3

    Copyright Your WebSite.Some Rights Reserved.