安装、配置和启动 ssh 服务,实现远程连接服务器

演示环境

  • 本地计算机系统:Windows 11
  • 远程服务器系统:Ubuntu 22.04

什么是 SSH

  • SSH(Secure Shell)是一种加密的网络协议,主要用于安全地远程登录和管理服务器或其他网络设备。

  • 它通过加密通信通道保护数据传输,防止中间人攻击和数据泄露,是替代不安全的 Telnet、FTP 等协议的常用方案。

工具说明

  • 服务器端(被连接端,例如本例中的 Ubuntu):需要安装并运行 SSH 服务(如 OpenSSH Server)

  • 客户端(连接端,例如本例中的 Windows):只需安装 SSH 客户端工具即可(如 FinalShell 等)

  • 由于 Win10 及以上版本内置 OpenSSH 客户端,所以,你可以选择下载 FinalShell 等 OpenSSH 客户端工具与服务器连接;也可以直接使用 Windows 内置的 OpenSSH 客户端工具与服务器连接(在 PowerShell 窗口执行 ssh 命令)

安装与启动 ssh

接下来,我们将在 Ubuntu 22.04 上安装 SSH 服务。本例中采用的是 OpenSSH

  • 首先,我们先更新软件包,确保是最新状态:

    sudo apt update

  • 接着,我们安装 SSH 服务器:

    sudo apt install openssh-server

  • 安装完成后,SSH 服务器会自动启动,我们使用以下命令可以检查它的启动状态:

    sudo systemctl status ssh

  • 如果 SSH 服务器没有启动,我们就启动它:

    sudo systemctl start ssh

  • 现在,我们再来看看 SSH 服务器是否成功启动:

    sudo systemctl status ssh

  • 在启动 SSH 服务器后,我们要确保系统重启了,SSH 服务也能自动启动:

    sudo systemctl enable ssh

配置 SSH 服务器

如果你想让连接更安全,你可能需要进行以下配置,当然它是可选的,你不操作也没关系

  • 在修改配置文件前,最好先备份它:

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

  • 接着,我们通过 Vim 工具,去编辑这个配置文件:

    sudo vim /etc/ssh/sshd_config

填写下面内容,或者删除 "#" 这个注释符号,就是在编写配置了

  1. 修改默认端口

    Port 6660 # 自定义端口,避免暴力破解

  2. 多端口监听

    Port 22 # 保留默认端口(谨慎!)
    Port 6660 # 新增端口
    Port 6670 # 新增端口

  3. 禁止 root 直接登录(强烈推荐!)

    PermitRootLogin no # 改为 no,强制用普通用户登录后 sudo

  4. 禁止通过密码认证(需要配合"密钥认证"一起使用)

    PasswordAuthentication no # 注意!请先确保密钥认证可用,再关闭此项,不然可能无法连接服务器!

  5. 启用公钥认证(默认已开启)

    PubkeyAuthentication yes

  6. 指定公钥文件路径(默认即可,如需自定义可以修改)

    AuthorizedKeysFile .ssh/authorized_keys # 支持多路径,如 .ssh/keys/*.pub

  7. 限制登录失败尝试次数(推荐,可以防止暴力破解)

    MaxAuthTries 3 # 失败三次后断开连接

  8. 限制空闲超时(防止会话劫持)

    ClientAliveInterval 600 # 每 600 秒(10 分钟)检测客户端存活
    ClientAliveCountMax 3 # 三次无响应后断开

  9. 添加白名单,允许特定用户登录(多个用户请用空格进行分隔)

    AllowUsers user1 user2 # 仅 user1、user2 可登录

  10. 允许特定 IP 段访问(比如,仅允许 192.168.1.0/24 网段)

    AllowGroups ssh-users

    配合用户组(需先创建组并添加用户)

    或直接指定 IP(需安装 ufw 并配置,见防火墙部分)

  11. 禁用空密码(默认已禁用)

    PermitEmptyPasswords no

12.禁止密码和密钥混用(可选,强制密钥认证)

复制代码
AuthenticationMethods publickey  # 仅允许密钥认证

让配置生效

如果你没有进行配置,可以跳到下一步

  • 在你配置完成后,你需要重新启动 SSH 服务器

    sudo systemctl restart sshd

  • 如果你修改了端口,还需要同步防火墙,详情见"配置防火墙"

配置防火墙

不论你是否进行了 SSH 服务器的配置,我都建议你看看你的防火墙,进行防火墙的配置;在 Ubuntu 中,防火墙通常是 ufw,即:Uncomplicated Firewall,简单防火墙

  • 防火墙能够阻挡连接,如果 SSH 被阻挡了,我们就无法连接,因此我们要告诉防火墙,让 SSH 通过。

  • 对于没有进行 SSH 配置的,请执行:

    sudo ufw allow ssh

    等价于:sudo ufw allow 22/tcp

  • 而对于修改过 SSH "端口" 的配置(比如修改端口为6660),需要执行:

    sudo ufw allow 6660/tcp

  • 如果想验证规则是否生效,可以执行:

    sudo ufw status numbered

    显示带编号的规则列表(IPv4 和 IPv6 分开)

  • 如果你想删除某些防火墙规则,比如,22端口,你可以:

    sudo ufw delete allow 22/tcp

  • 当然,按编号删除规则,是最精准的,推荐这种方法:

    sudo ufw delete 1 # 删除编号 1 的规则

  • 批量删除规则(如编号 1 和 2),执行:

    sudo ufw delete 1 2 # 空格分隔多个编号

  • 允许 SSH 通过防火墙后,请查看系统上的防火墙是否已启用:

    sudo ufw status

  • 如果防火墙尚未启用,您会看到输出 Status: inactive,表明防火墙当前处于禁用状态;这时,请你启用防火墙(注意!这将会与服务器断开连接,请一定要确保你的 SSH 连接可用)

    sudo ufw enable

  • 其他防火墙配置,可以自行选择

  • 允许局域网 IP 访问(示例:192.168.1.0/24 网段)

    sudo ufw allow from 192.168.1.0/24 to any port 22 # 默认端口

    或自定义端口:

    sudo ufw allow from 192.168.1.0/24 to any port 6660/tcp

  • 限制单 IP 访问(如办公电脑 IP)

    sudo ufw allow from 192.168.1.100 to any port 6660/tcp

  • 组合规则(允许 IP 且限速防暴力破解)

    sudo ufw limit from 192.168.1.0/24 to any port 5090/tcp

    "limit" 会自动添加速率限制(默认每分钟 60 次)

  • 封禁单个 IP 地址(如,192.168.1.101)

    sudo ufw deny from 192.168.1.101

  • 封禁 IP 地址段(如 192.168.1.0/24)

    sudo ufw deny from 192.168.1.0/24

直接连接

  • 对于没有进行 SSH 服务器配置的朋友,可以打开 PowerShell 命令窗口,输入

    ssh xiaoming@192.168.25.26

    上面的信息要换成你自己的,格式如下:

    ssh 以什么身份登录服务器@服务器IP地址

  • 然后输入密码即可

  • 或者你也可以使用其他的 SSH 客户端工具,比如 Finalshell、PuTTY等,网上教程很多,这里就不作过多介绍了。

密钥连接

  • 对于已经更改 SSH 服务器端口(比如改为了6660端口),同时又禁用了密码登录改为密钥连接的,可以参考下面教程。

  • 通过 PowerShell 内置的 SSH 客户端生成密钥

    ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_4096 -N ""

  • 获取密钥内容,通过 PowerShell 执行命令后(注意不是cmd),复制其输出的内容

    cat ~/.ssh/id_rsa_4096.pub

  • 将复制的内容,上传到服务器的 "你要登录的用户的主目录下的 .ssh/authorized_keys文件中"(如果你修改了默认路径,就设置为你的路径)

  • 检查该用户主目录下是否存在 .ssh 目录,若不存在则创建

    mkdir -p ~/.ssh

  • 创建 authorized_keys 文件

    vim authorized_keys

  • 把复制的内容,放进去即可(自己想办法)

  • 为保证安全性,需设置 .ssh 目录的权限为 700,设置 authorized_keys 文件的权限为 600

    chmod 700 ~/.ssh

    chmod 600 ~/.ssh/authorized_keys

  • 打开 PowerShell 命令窗口,连接到 SSH 6660端口(注意:-i 参数接收的是id_rsa_4096私钥,而不是公钥)

    ssh -i "~.ssh\id_rsa_4096" -p 6660 xiaoming@192.168.24.25

    ssg -i "本地私钥文件的地址" -p 端口号 服务器用户名@服务器地址

  • 使用类似 FinalShell 等 SSH 客户端工具,原理也是和用 PowerShell 内置的 SSH 客户端工具差不多,这里就不赘述了。

连接失败

相关推荐
七夜zippoe4 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
Fcy6486 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满6 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠6 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
Harvey9036 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
珠海西格电力科技7 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
释怀不想释怀8 小时前
Linux环境变量
linux·运维·服务器
zzzsde8 小时前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器
聆风吟º9 小时前
CANN开源项目实战指南:使用oam-tools构建自动化故障诊断与运维可观测性体系
运维·开源·自动化·cann
NPE~10 小时前
自动化工具Drissonpage 保姆级教程(含xpath语法)
运维·后端·爬虫·自动化·网络爬虫·xpath·浏览器自动化