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

安装、配置和启动 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   # 自定义端口,避免暴力破解
  1. 多端口监听
Port 22    # 保留默认端口(谨慎!)
Port 6660  # 新增端口
Port 6670  # 新增端口
  1. 禁止 root 直接登录(强烈推荐!)
PermitRootLogin no   # 改为 no,强制用普通用户登录后 sudo
  1. 禁止通过密码认证(需要配合"密钥认证"一起使用)
PasswordAuthentication no    # 注意!请先确保密钥认证可用,再关闭此项,不然可能无法连接服务器!
  1. 启用公钥认证(默认已开启)
PubkeyAuthentication yes
  1. 指定公钥文件路径(默认即可,如需自定义可以修改)
AuthorizedKeysFile  .ssh/authorized_keys    # 支持多路径,如 .ssh/keys/*.pub
  1. 限制登录失败尝试次数(推荐,可以防止暴力破解)
MaxAuthTries 3    # 失败三次后断开连接
  1. 限制空闲超时(防止会话劫持)
ClientAliveInterval 600   # 每 600 秒(10 分钟)检测客户端存活
ClientAliveCountMax 3     # 三次无响应后断开
  1. 添加白名单,允许特定用户登录(多个用户请用空格进行分隔)
AllowUsers user1 user2    # 仅 user1、user2 可登录
  1. 允许特定 IP 段访问(比如,仅允许 192.168.1.0/24 网段)
AllowGroups ssh-users 
# 配合用户组(需先创建组并添加用户)
# 或直接指定 IP(需安装 ufw 并配置,见防火墙部分)
  1. 禁用空密码(默认已禁用)
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 客户端工具差不多,这里就不赘述了。

连接失败

  • 如果你是修改了端口,又连接失败,可以看看这篇文章:https://blog.csdn.net/code_stream/article/details/142560124

http://www.mrgr.cn/news/94025.html

相关文章:

  • SVT-AV1源码分析函数 svt_av1_optimize_b
  • c++ constraints与concepts使用笔记
  • 如何用HTML5 Canvas实现电子签名功能✍️
  • 全网最详解答OSPF基础
  • 我与DeepSeek读《大型网站技术架构》(10)- 维基百科的高性能架构设计分析
  • C# Enumerable类 之 数据分组
  • 插入排序算法优化
  • 数字电路逻辑代数 | 运算 / 定律 / 公式 / 规则 / 例解
  • 【设计模式】《设计模式:可复用面向对象软件的基础》设计模式的分类与组织
  • 类和对象(下)
  • 大语言模型-语言模型发展历程
  • ⭐算法OJ⭐链表排序【归并排序】(C++/JavaScript 实现)
  • 基于Ollama平台部署的Qwen大模型实现聊天机器人
  • ⭐算法OJ⭐经典题目分类索引(持续更新)
  • NVSHMEM介绍、InfiniBand GPUDirect、和NVshmem使用案例说明
  • Application.OnTime如何引用带参数的过程
  • 记录--有惊无险
  • 数据结构全解析:从线性到非线性,优缺点与应用场景深度剖析
  • 大模型在甲状腺良性肿瘤诊疗全流程中的应用研究报告
  • Nginx 监控方法(‌Nginx Monitoring Methods)