安装、配置和启动 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 客户端工具差不多,这里就不赘述了。

连接失败

相关推荐
UFIT1 小时前
nginx性能优化与深度监控
运维·nginx
虎头金猫3 小时前
如何解决 403 错误:请求被拒绝,无法连接到服务器
运维·服务器·python·ubuntu·chatgpt·centos·bug
muxue1784 小时前
关于almalinux分区配置:
linux·运维·数据库
独行soc6 小时前
2025年渗透测试面试题总结-某服面试经验分享(附回答)(题目+回答)
linux·运维·服务器·网络安全·面试·职场和发展·渗透测试
C-20027 小时前
使用Deployment部署运行Nginx和Apache服务
运维·kubernetes·apache
leo·Thomas8 小时前
NetBox Docker 全功能部署方案(Ubuntu 22.04 + Docker)
运维·ubuntu·docker·容器·资产管理
惜.己8 小时前
linux中的常用命令(一)
linux·运维·服务器
lcw_lance8 小时前
数字孪生[IOC]常用10个技术栈(总括)
大数据·运维·人工智能
乐维_lwops10 小时前
金融企业如何借力运维监控强化合规性建设?
运维·金融·运维监控
m0_5937581010 小时前
系统重装之后,通过ssh无法登录
linux·运维·服务器