安装、配置和启动 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 [email protected]

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

    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 [email protected]

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

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

连接失败

相关推荐
TechStack 创行者1 小时前
基于Alpine构建MySQL 10.11.11镜像的完整教程
运维·数据库·mysql·docker
姜太小白2 小时前
【Linux】centos配置可用的yum源
linux·运维·centos
夏白分享社2 小时前
Nanobrowser:开源AI自动化神器 OpenAI Operator替代品
运维·人工智能·自动化
IT 古月方源3 小时前
linux centos 忘记root密码拯救
linux·运维·centos
安科瑞王可3 小时前
基于物联网技术的分布式光伏监控系统设计与实现
运维·分布式·物联网·能源管理·光伏
落魄实习生4 小时前
小米路由器SSH下安装DDNS-GO
运维·golang·ssh
zhangpeng4555479404 小时前
DevOps工具链
运维·devops
小袁搬码5 小时前
docker引擎与docker-compose离线版本下载详细教程
linux·运维·docker·容器·docker-compose
skywalk81635 小时前
Windows10 WSL又又又一次崩了 Docker Desktop - Unexpected WSL error
运维·ubuntu·docker·容器·wsl
海绵波波1075 小时前
【运维】服务器系统从centos7重装为ubuntu22.04
运维·服务器