当前位置:首页 > Linux > 正文

如何在linux安装ssh

在多数 Linux 系统中,执行 sudo apt install openssh-server(Debian/Ubuntu)或 sudo yum install openssh-server(CentOS/RHEL),再运行 sudo systemctl enable --now sshd 即可完成 SSH 安装与

以下是关于 如何在 Linux 系统中安装并配置 SSH(Secure Shell) 的完整指南,涵盖多种主流发行版的操作步骤、核心概念解析及实用技巧:


前置知识:什么是 SSH?

SSH(Secure Shell)是一种加密的网络协议,用于替代传统的 Telnet/FTP 等明文传输工具,其核心功能包括:
安全远程登录:通过密码或密钥认证实现终端访问;
文件传输:支持 scp(安全拷贝)和 rsync
隧道代理:可穿透防火墙建立加密通道;
跨平台兼容:适用于 Windows/macOS/Linux/Unix 系统。

️ 注意:默认情况下,大多数 Linux 发行版未预装 OpenSSH 服务器组件,需手动安装。


按发行版分类的安装方法

| 发行版类型 | 包管理器 | 安装命令 | 备注 |

|——————|——————-|———————————–|————————–|
| Ubuntu/Debian | apt | sudo apt update && sudo apt install openssh-server | 推荐优先执行更新源同步 |
| CentOS/RHEL | dnf/yum | sudo yum install -y openssh-serversudo dnf install -y openssh-server | RHEL 8+ 建议使用 dnf |
| Arch Linux | pacman | sudo pacman -S openssh | 自动处理依赖关系 |
| Fedora | dnf | sudo dnf install -y openssh-server| 与 CentOS 命令一致 |
| openSUSE | zypper | sudo zypper install openssh | YaST 图形界面也可操作 |

通用验证方式
安装完成后,可通过以下命令确认版本:

ssh -V
# 输出示例:OpenSSH_8.9p1, OpenSSL 3.0.7...

服务管理与启动

启动/停止 SSH 服务

操作 Ubuntu/Debian CentOS/RHEL Arch/Fedora
启动服务 sudo systemctl start sshd sudo systemctl start sshd sudo systemctl start sshd
开机自启 sudo systemctl enable sshd sudo systemctl enable sshd sudo systemctl enable sshd
重启服务 sudo systemctl restart sshd sudo systemctl restart sshd sudo systemctl restart sshd
查看状态 systemctl status sshd systemctl status sshd systemctl status sshd

提示:若出现 “Failed to start” 错误,可尝试 journalctl -xe 查看日志定位问题。

防火墙配置(关键步骤!)

若服务器启用了防火墙(如 ufwfirewalld),必须放行 SSH 默认端口 22

  • Ubuntu/Debian
    sudo ufw allow 22/tcp
    sudo ufw reload
  • CentOS/RHEL
    sudo firewall-cmd --permanent --add-service=ssh
    sudo firewall-cmd --reload

基础配置优化

主配置文件路径

所有发行版的主配置文件均为 /etc/ssh/sshd_config,常用参数说明如下表:

参数 默认值 作用 推荐修改建议
Port 22 SSH 监听端口 生产环境建议改为非标准端口
PermitRootLogin yes 是否允许 root 直接登录 改为 without-password 更安全
PasswordAuthentication yes 是否启用密码认证 高危场景建议设为 no
PubkeyAuthentication yes 是否启用公钥认证 保持默认
X11Forwarding no 是否启用 X11 转发 根据需求调整
AllowUsers (空) 白名单机制,仅允许指定用户登录 限制敏感账户暴露
DenyUsers (空) 黑名单机制,禁止指定用户登录 配合 AllowUsers 使用

修改生效方式
编辑保存后执行 sudo systemctl restart sshd

生成 SSH 密钥对(推荐)

相比密码登录,密钥认证更安全且便捷:

# 本地机器执行(客户端)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# 按提示选择保存路径(默认 ~/.ssh/id_rsa)
# 将公钥上传至服务器
ssh-copy-id user@remote_host

注意:首次使用时需输入服务器密码,后续可直接免密登录。


连接测试与排错

本地连接测试

ssh user@localhost
# 或通过 IP 地址
ssh user@192.168.1.100

成功标志:显示欢迎信息并进入目标系统的终端。

常见错误及解决方案

错误现象 可能原因 解决方法
Connection refused SSH 服务未运行/防火墙拦截 systemctl status sshd + 检查防火墙规则
Permission denied 密码错误/账户被禁用 重置密码或检查 /etc/passwd
No route to host 网络不通/IP 错误 ping 测试连通性
Too many authentication failures 触发防暴力破解机制 等待几分钟后重试

高级安全实践

禁用 root 直接登录

修改 /etc/ssh/sshd_config

PermitRootLogin no

并通过普通用户提权执行特权操作。

更改默认端口

Port 22 改为其他高位端口(如 2222),并在防火墙中同步更新规则。

定期审计日志

查看 /var/log/auth.log 分析登录尝试记录:

grep "Failed password" /var/log/auth.log
# 查找可疑登录行为

相关问答 FAQs

Q1: 为什么我明明安装了 SSH,但依然无法从外部连接?

A: 请按以下顺序排查:

如何在linux安装ssh  第1张

  1. 确认服务已启动且设置为开机自启 → systemctl status sshd
  2. 检查防火墙是否放行了 SSH 端口(默认 22);
  3. 确保 SELinux 未阻止连接(CentOS/RHEL 特有),可临时关闭测试:setenforce 0
  4. 核对 /etc/ssh/sshd_config 中的 ListenAddress 是否绑定了正确的网卡 IP。

Q2: 如何限制某个用户只能通过密钥登录?

A: 编辑该用户的专属配置文件 /etc/ssh/sshd_config.d/user_specific(需自行创建),添加以下内容:

Match User restricted_user
    PasswordAuthentication no
    ForceCommand /bin/echo "Access denied."

此配置会禁止该用户使用密码登录,并对非规请求返回固定提示。


通过以上步骤,您已完成 SSH 服务的完整部署与基础安全加固,建议定期更新系统补丁(如 OpenSSH 破绽修复),并采用最小权限

0