从AWS SecretsManager获取私钥后无法用ssh-keygen生成公钥
解决AWS SecretsManager无密码SSH私钥生成公钥的格式问题
提取正确的私钥内容
默认AWS CLI获取密钥的输出是JSON结构,必须精准提取纯私钥字符串,避免JSON干扰:aws secretsmanager get-secret-value --secret-id your-secret-id --query SecretString --output text--query SecretString指定只提取私钥内容,--output text确保输出为纯文本而非JSON格式。处理换行符异常
从SecretsManager获取的私钥可能带有Windows风格的CRLF换行符(\r\n),而ssh-keygen仅识别Unix风格的LF(\n),导致解析错误。可通过tr命令过滤多余回车符:aws secretsmanager get-secret-value --secret-id your-secret-id --query SecretString --output text | tr -d '\r' | ssh-keygen -y -f /dev/stdin正确写入文件的方式
若需先写入文件再处理,避免echo自动添加额外换行,改用printf保留原格式:printf "%s" "$(aws secretsmanager get-secret-value --secret-id your-secret-id --query SecretString --output text)" > private_key.pem ssh-keygen -y -f private_key.pem排查不可见字符
用cat -A查看私钥文件中的不可见字符(比如^M代表CR字符):cat -A private_key.pem确认后用
sed批量去除:sed -i 's/\r$//' private_key.pem
原因说明
手动复制时终端会自动过滤或转换异常的换行/不可见字符,而直接通过CLI管道或写入文件时会保留这些格式问题,导致ssh-keygen无法正确识别无密码私钥,误判为加密私钥从而触发密码提示。
内容的提问来源于stack exchange,提问作者Wurzelseppi
相关产品推荐
相关产品推荐

