麒麟OS通过SSH公钥登录需完成三步:一、用ssh-keygen -t ed25519生成密钥对;二、用ssh-copy-id或手动方式将公钥写入~/.ssh/authorized_keys并设权限600;三、修改/etc/ssh/sshd_config启用PubkeyAuthentication、禁用PasswordAuthentication,注释#UsePAM yes,重启sshd服务。
如果您希望在麒麟操作系统上通过SSH公钥方式实现远程登录,以规避密码认证带来的安全风险与重复输入负担,则需完成密钥对生成、公钥部署及服务端认证配置三个核心环节。以下是多种可独立实施的配置方法:
该方法适用于本地客户端与麒麟目标主机均预装OpenSSH且网络可达的场景,能自动创建.ssh目录、写入authorized_keys并设置正确权限。
1、在本地终端执行密钥生成命令,接受默认路径与空密码(如需更高安全性可设密码):
ssh-keygen -t ed25519 -C "admin@kylin"
2、确认私钥id_ed25519与公钥id_ed25519.pub已生成于~/.ssh/目录下,且私钥权限为600。
3、执行公钥自动上传命令,将公钥注入目标用户账户:
ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]
4、若提示输入密码,请输入目标用户密码;成功后系统将显示“Number of key(s) added: 1”。
当目标麒麟主机未启用ssh-copy-id或处于最小化安装状态时,可通过管道命令安全完成公钥写入,避免文件传输过程中的权限错误。
1、在本地终端输出公钥内容:
cat ~/.ssh/id_ed25519.pub
2、登录麒麟目标主机,进入用户家目录并初始化.ssh结构:
mkdir -p ~/.ssh && chmod 700 ~/.ssh
3、将公钥字符串追加至authorized_keys(注意替换为实际公钥内容):
echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI..." >> ~/.ssh/authorized_keys
4、严格设置授权文件权限:
chmod 600 ~/.ssh/authorized_keys
适用于需同时为多个用户(包括root)启用密钥登录的运维场景,需确保每个目标账户的.ssh目录与authorized_keys权限合规,并统一启用服务端公钥认证。
1、为每个目标用户分别生成密钥对,或复用同一对密钥,确保公钥内容唯一不冲突。
2、依次登录各目标账户,执行以下命令(以root为例):
sudo -u root mkdir -p /root/.ssh && sudo chmod 700 /root/.ssh
3、将对应公钥写入root账户的授权文件:
sudo sh -c 'echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI..." >> /root/.ssh/authorized_keys'
4、设置root专属授权文件权限:
sudo chmod 600 /root/.ssh/authorized_keys
麒麟OS默认可能禁用公钥认证或受PAM机制干扰,必须显式启用PubkeyAuthentication并屏蔽UsePAM相关限制,否则密钥登录将被拒绝。
1、编辑主配置文件:
sudo vim /etc/ssh/sshd_config
2、确认以下三行未被注释且值为yes:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no
3、检查#UsePAM yes是否仍处于注释状态;若未注释,必须添加#号注释掉该行,这是麒麟系统特有要求。
4、保存退出后立即重载服务配置:
sudo systemctl reload sshd
在确认服务端配置生效后,需通过真实连接测试密钥登录是否成功,并在验证无误后彻底关闭密码认证通道,防止回退攻击。
1、从本地发起SSH连接,不输入密码即可登录:
ssh -i ~/.ssh/id_ed25519 [email protected]
2、登录成功后,再次编辑/etc/ssh/sshd_config,将PasswordAuthentication设置为no(若尚未设置)。
3、执行完整重启确保策略生效:
sudo systemctl restart sshd
4、尝试使用密码方式连接(如ssh [email protected]),应返回Permission denied (publickey)错误提示。