post cover

SSH 的常用指令(含密钥转换与登录排查)


这篇记录一些我在服务器运维中最常用的 SSH 指令,覆盖四个场景:

  • 生成密钥对
  • 设置 SSH 目录与授权文件权限
  • OpenSSH 与 PuTTY 私钥格式互转
  • 通过日志排查异常登录 IP 使用了哪把公钥

1) 生成密钥对

# 生成 RSA 密钥对
# -t rsa: 指定算法为 RSA
# -P '': 空口令(按需使用,生产环境建议加口令)
# -m PEM: 以 PEM 格式输出私钥,兼容性更好
ssh-keygen -t rsa -P '' -m PEM

提示:如果没有兼容性要求,日常也可以优先考虑 Ed25519(更短更快)。

2) 权限设置(非常关键)

# .ssh 目录权限
chmod 700 .ssh

# 公钥授权文件权限
chmod 600 .ssh/authorized_keys

SSH 对权限非常敏感,权限过宽时可能直接拒绝认证。

3) OpenSSH 与 PuTTY 私钥格式转换

# OpenSSH 私钥 -> PuTTY .ppk
puttygen id_rsa -o id_rsa.ppk

# PuTTY .ppk -> OpenSSH 私钥
puttygen id_rsa.ppk -O private-openssh -o id_rsa2

在 Windows(PuTTY)与 Linux(OpenSSH)混用时,这组命令很实用。

4) 排查异常登录 IP 对应的公钥

当你在服务器上发现可疑登录时,可以按下面步骤定位到底用了哪把 key:

# 先从登录日志里筛指定 IP
cat /var/log/secure | grep 115.192.217.112

# 例子输出:
# Accepted publickey for root from 115.192.217.112 port 57305 ssh2: RSA SHA256:4egcXPHAIXpN7XxEiBQVV5dWEtQvi4JzbicrBJRZp1I

# 再在 authorized_keys 中按指纹反查对应公钥
ssh-keygen -lf ~/.ssh/authorized_keys | grep 4egcXPHAIXpN7XxEiBQVV5dWEtQvi4JzbicrBJRZp1I

这样就能快速确认是哪条授权 key 被用于登录,方便后续做禁用或更换。


额外建议

  • 尽量禁用 root 直接 SSH 登录,改用普通用户 + sudo
  • 开启登录失败限制(如 fail2ban)
  • 定期轮换密钥,清理不再使用的公钥
  • 对关键主机启用双因素认证(2FA)

如果你也有一套常用 SSH 排障命令,欢迎补充交流。