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 排障命令,欢迎补充交流。