为了安全方便的管理和维护服务器,禁止SSH密码登录,使用证书认证是更好的选择。方法是用户生成密钥对,私钥严格保管不泄露。将公钥添加到服务器上用户对应的authorized_keys文件中,然后用户就可以凭证书登录了。生成证书时,也可以添加证书。防止私钥被窃取的密码。这种方法很方便,但是有一个问题,就是当服务器多的时候,服务器上公钥的管理会比较麻烦,人员变动的时候容易清理遗漏,造成安全性风险。在本文中,我们介绍一种通过中心CA统一颁发证书来管理SSH证书的方法。概述为了解决统一管理的问题,引入CA对SSH认证进行统一管理。用户仍然需要生成公钥和私钥对证书。但是,不是通过将用户的公钥添加到服务器来完成身份验证,而是使用证书颁发机构(CA)密钥对用户的公钥进行签名。签名过程只生成第三个证书文件,用户可以通过签名后的证书和自己的原始证书对完成登录。在服务器端,只需要配置SSH的公钥认证给CA,服务器端通过检查用户证书是否由CA签发来完成认证过程。具体方法1、创建CA用户,生成证书颁发机构CA私钥对,并保证私钥的私钥安全:umask77#修改掩码,保证之后生成的目录和文件的权限mkdir~/CC-ca&&cd~/CC-cassh-keygen-CCA-fca-b4096#生成时给证书加上密码,防止泄露。2、配置CA公钥认证,并在服务器上指定允许所有CA签名的用户访问服务器:将CA的公钥上传到服务器,例如在/etc/ssh/ca.pub中/etc/ssh/sshd_config添加以下行以配置对CA颁发的证书的信任:TrustedUserCAKeys/etc/ssh/ca.pub重新启动sshd服务:servicesshdreload3。CA颁发用户证书。用户使用ssh-keygen生成证书,并将公钥发送给CA中心。CA中心使用私钥给证书加签:ssh-keygen-sca-IUSER_ID-V+12w-z1id_ecdsa.pub命令行说明:-sca要用CA签-IUSER_ID-userID/用户名-V+12w-证书到期前的时间。在此示例中,证书的有效期为12周。-z1设置证书的序列号,可用于取消证书。id_ecdsa.pub:需要签名的用户公钥生成证书id_ecdsa-cert.pub,需要发给开发者,用户放在~/.ssh文件夹下。4、添加上面的角色,完成证书的CA签名和统一认证。但是还有一个问题。用户可能还需要分类。不同的团队和角色需要有不同的访问权限。实际上,可以在签名过程中添加角色来指定允许哪些访问权限访问服务器。添加新用户时,他们可以访问所有相关服务器,而无需在这些服务器上添加任何内容。5.在服务器上配置角色信息创建配置访问权限的文件夹:mkdir/etc/ssh/auth_principals在该文件夹下可以创建一个服务器用户名的文件,用户可以登录,例如授予root权限访问某些角色,添加文件/etc/ssh/auth_principals/root。在/etc/ssh/auth_principals/root文件中,配置可以root用户登录的角色,每行一个角色,如admin_devroot_opROLE1SSHD配置文件/etc/ssh/sshd_config在服务器上,添加认证作用:AuthorizedPrincipalsFile/etc/ssh/auth_principals/%u然后重新加载sshd服务servicesshdreload6。CA颁发带角色的用户证书可以使用命令行颁发带角色的证书:ssh-keygen-sca-IUSER_ID-nROLE1,ROLE2-V+12w-z2id_ecdsa.pub和前面的命令行一样,加入-nROLE1,ROLE2标志。现在,该用户可以使用在auth_principals文件中配置的ROLE1或ROLE2登录到服务器。7.证书的注销如前所述,用户证书是可以注销的。注销用户需要使用的用户序列号。建议同意维护一个用户序列号列表,或者建立一个数据库。8.撤销证书文件当已经有revoked-keys列表想更新证书时,通过以下命令ssh-keygen-k-frevoked-keys-u-scalist-to-revoke生成撤销证书文件(-u旗帜)。list-to-revoke文件的内容由用户名(ids)或序列号(生成期间的-z标志)组成,如下所示:serial:1id:test.user这将撤销证书和所有序列号为1的ID访问test.user证书的权限。8、服务器配置注销为了让服务器完成revokedkeys的配置,需要将生成/更新的revokedkeys文件添加到/etc/ssh/revoked-keys中,配置在/etc/ssh/sshd_config:RevokedKeys/etc/ssh/revoked-keys注意:确保revoked-keys文件可访问且可读,否则任何用户都无法访问。小结在本文中,我们介绍了一种统一的证书管理方法,即使用CA对用户的公钥进行签名。通过这种方式,可以基于角色通过ssh来管理对服务器的访问。您只需要配置一次服务器(允许哪些角色访问服务器)。对于每个用户,只需要生成一个签名证书,就可以实现按角色登录所有相关机器的方法。也方便吊销用户的证书,从而限制用户的访问。由于每个证书签名的有效期是有限的,即使不能及时取消用户权限,也可以在到期后自动取消,从而保证了安全性。