密钥验证登录

以下讨论皆以密钥在本地主机、公钥在远程主机而展开

为什么要设置密钥认证?因为“密码认证”容易遭到“暴力破解”。

密钥对

# Ununtu

# "ssh-keygen" 是用来生成密钥的命令
# -t 参数指定密钥类型(type)
ssh-keygen -t rsa

接下来会提示输入 “passphrase” 密码短语(默认为空)。

假如设置密码短语的话,之后通过ssh连接远程主机时,若已经设置验证方式为“密钥验证”,将会既要求输入密钥文件又要求输入密码短语。

若留空则只需要输入密钥文件就能链接远程主机。


密钥对默认生成在: “~/.ssh/” 路径下。

# Ubuntu

# 以追加写入将公钥写入 "authorized_keys"
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

我们可以使用 scp 将私钥传输到本地:

# 本地执行


# 将指定文件传输到本地指定位置
scp root@your.host.com:~/.ssh/id_rsa ./

其实现在可以将远程服务器的相关密钥对删掉

配置

对于ssh链接,影响被链接端主机的相关配置一般在: “/etc/ssh/sshd_config”

我们修改配置文件,选择禁用“PasswordAuthentication”,并启用“PubkeyAuthentication”:

# /etc/ssh/sshd_config


PasswordAuthentication no
PubkeyAuthentication yes

当然如果不嫌麻烦,又缺乏安全感的话,我们可以同时启用两种认证方式,要求在每次建立链接前,依次进行两种认证方式:

# /etc/ssh/sshd_config

PasswordAuthentication yes
PubkeyAuthentication yes
AuthenticationMethods publickey,password

最后:

# Ubuntu

# 重新加载配置文件
systemctl reload sshd

测试

# 本地执行

ssh root@your.host.com # root@your.host.com: Permission denied (publickey)

ssh -i ./id_rsa root@your.host.com # 链接成功!

通道保持

配置

# /etc/ssh/sshd_config

TCPKeepAlive yes 
ClientAliveInterval 60 
ClientAliveCountMax 30
# Ubuntu

# 重新加载配置文件
systemctl reload sshd

解释

1. TCPKeepAlive yes

  • ​含义​​:​​启用 TCP 层的心跳检测机制​
  • ​详细说明​​:
    • 通过操作系统底层发送 ​​TCP keepalive 数据包​​ 检测连接状态
    • 当客户端异常掉线(断网/死机/断电)时:
      • 服务器能​​快速检测​​到连接中断(约 15-45 分钟,具体取决于系统内核参数)
      • 自动清理僵尸连接,释放服务器资源
    • ⚠️ ​​注意​​:某些防火墙/NAT 设备可能过滤 keepalive 包导致误判

2. ClientAliveInterval 60

  • ​含义​​:​​设置 SSH 应用层心跳检测间隔​
  • ​单位​​:秒
  • ​详细说明​​:
    • 服务器每 ​​60 秒​​ 通过 SSH 加密通道向客户端发送一次心跳请求
    • 如果客户端正常在线,会自动返回响应维持连接
    • 主要目的:​​防止中间设备(防火墙/NAT)切断空闲连接​
    • 举例:移动网络运营商通常 30 分钟切断空闲连接,此设置可避免 SSH 会话被意外断开

3. ClientAliveCountMax 30

  • ​含义​​:​​设置连续心跳失败的容忍次数​
  • ​详细说明​​:
    • 当客户端连续 ​​60 次​​ 未响应心跳请求时,服务器才会断开连接
    • ​总超时时间计算​​: ClientAliveInterval × (ClientAliveCountMax + 1) 本例:60 × (60 + 1) = 3660 秒 = 61 分钟
    • 此配置让 SSH 会话能在网络波动时保持连接,仅当真中断时才断开

三者协作机制示意图

客户端正常时: 服务器每 60 秒[ClientAliveInterval] → 客户端响应 → 维持连接 客户端断线时: 第 1 次请求 超时 → 计数+1(当前 1/60) 第 2 次请求 超时 → 计数+1(当前 2/60) ... 第 60 次请求 超时 → 计数达到[ClientAliveCountMax] → 服务器断开连接 (总耗时 61 分钟)


对比项说明

配置项检测层级主要目的超时控制
TCPKeepAliveTCP 传输层检测物理连接中断依赖系统内核参数
ClientAliveIntervalSSH 应用层维持加密会话活跃精确控制检测频率
ClientAliveCountMaxSSH 应用层控制容忍网络波动的时长最终超时=间隔×(n+1)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

作者

3049874370@qq.com

相关文章

Squid代理服务的搭建

前言 所谓的HTTP代理或者HTTPS代理指...

读出全部