悠悠楠杉
网站页面
正文:
在开发运维中,SSH公钥的格式验证是一个高频需求。无论是自动化部署还是用户注册时的密钥上传,都需要确保公钥符合规范。本文将深入解析SSH公钥的结构,并提供可直接使用的正则表达式验证方案。
OpenSSH公钥通常由三部分组成,以空格分隔:
1. 密钥类型(如ssh-rsa、ecdsa-sha2-nistp256)
2. Base64编码的密钥体(长度可变)
3. 注释(可选,如用户邮箱)
示例:
ssh-rsa AAAAB3NzaC1yc2E...3E8v user@example.com验证时需满足以下规则:
- 密钥类型必须为已知类型(如rsa/ed25519/ecdsa)
- 密钥体为合法Base64字符串(含+、/、=等符号)
- 注释部分可选,但不得包含控制字符
完整正则表达式:
^(ssh-(rsa|dss|ed25519)|ecdsa-sha2-nistp(256|384|521))\s+[A-Za-z0-9+/=]+(\s+.+)?$关键点解析:
- ^(ssh-(rsa|dss|ed25519)...):匹配支持的密钥类型
- \s+:至少一个空格分隔符
- [A-Za-z0-9+/=]+:Base64字符集(注意包含等号填充)
- (\s+.+)?$:可选注释部分
以下为Python验证函数:
import re
def validate_ssh_public_key(key: str) -> bool:
pattern = r'^(ssh-(rsa|dss|ed25519)|ecdsa-sha2-nistp(256|384|521))\s+[A-Za-z0-9+/=]+(\s+.+)?$'
return bool(re.fullmatch(pattern, key.strip()))
# 测试用例
print(validate_ssh_public_key("ssh-rsa AAAAB3Nza...")) # True
print(validate_ssh_public_key("invalid-key")) # False
AAAAB3Nza... user@host的输入。!@#等符号会被检测到。