需生成ED25519密钥对并分发:执行ssh-keygen -t ed25519 -b 256 -C "ops@kylin-bastion-2026" -f ~/.ssh/bastion_id_ed25519,设私钥权限600;再通过循环读取IP清单,将公钥安全写入各堡垒机/root/.ssh/authorized_keys。

要在麒麟OS上为所有运维堡垒机生成高强度SSH密钥对并完成分发,需确保私钥具备抗暴力破解能力、公钥能一次性注入多台目标堡垒机的授权列表,且全程规避明文密码交互与权限错误。
生成ED25519强密钥对并加固私钥
ED25519算法比RSA更安全、签名更快,且密钥长度仅256位即可等效RSA 3072位强度,是当前麒麟OS官方推荐首选。
执行命令生成密钥对:ssh-keygen -t ed25519 -b 256 -C "ops@kylin-bastion-2026" -f ~/.ssh/bastion_id_ed25519
必须指定-f参数强制写入自定义文件名,避免覆盖已有id_ed25519,否则可能导致其他服务登录中断。
生成过程中连续按三次回车,不设密码短语——因为堡垒机批量登录场景下,带密码的私钥无法被自动化脚本调用;若后续需人工介入操作,再单独用ssh-add -p临时加载。
立即设置私钥权限为600:chmod 600 ~/.ssh/bastion_id_ed25519。这一步不可跳过,OpenSSH在读取私钥时会严格校验权限,非600将直接拒绝使用并报错Permissions are too open。
从堡垒机清单中提取IP并批量部署公钥
假设你已有一份运维堡垒机IP清单文件/opt/bastion/ips.txt,每行一个IP(如10.20.30.101),且所有堡垒机均启用root登录、SSH服务正常、用户为root。
第一步:提取公钥内容并存为变量:PUBKEY=$(cat ~/.ssh/bastion_id_ed25519.pub)
第二步:遍历清单,逐台执行安全写入(含目录创建、权限设置、追加公钥):
while read ip; do ssh root@$ip "mkdir -p /root/.ssh && chmod 700 /root/.ssh && echo '$PUBKEY' >> /root/.ssh/authorized_keys && chmod 600 /root/.ssh/authorized_keys"; done
该命令使用单引号包裹$PUBKEY外层双引号,确保公钥中可能含有的特殊字符(如+、/、换行符)不会被shell意外解析或截断——这是手动分发中最容易导致ssh: no matching key exchange method found错误的原因。
第三步:验证首台堡垒机是否生效:ssh -i ~/.ssh/bastion_id_ed25519 -o ConnectTimeout=5 root@$(head -n1 /opt/bastion/ips.txt) 'echo OK'。返回OK即表示密钥已正确加载并可执行命令。
统一修正所有堡垒机的sshd_config认证策略
方法一:通过SSH批量下发配置修正指令(推荐)
执行以下单行命令,自动取消注释关键行、禁用密码、重启服务:
while read ip; do ssh root@$ip "sed -i 's/^#*PubkeyAuthentication.*/PubkeyAuthentication yes/g; s/^#*PasswordAuthentication.*/PasswordAuthentication no/g; s/^#*AuthorizedKeysFile.*/AuthorizedKeysFile .ssh\/authorized_keys/g; s/^#*PermitRootLogin.*/PermitRootLogin yes/g; s/^#*UsePAM.*/#UsePAM no/g' /etc/ssh/sshd_config && systemctl restart ssh"; done
注意:#UsePAM no是银河麒麟特有要求,若保留UsePAM yes,即使开启PubkeyAuthentication,PAM模块仍会拦截密钥认证流程,导致始终提示密码输入。
方法二:若某台堡垒机SSH连接已中断,需现场登录后手动编辑/etc/ssh/sshd_config,确认以下四行未被注释且值正确:PubkeyAuthentication yesPasswordAuthentication noAuthorizedKeysFile .ssh/authorized_keys#UsePAM no
保存后运行systemctl restart ssh立即生效,无需 reboot。











