Ubuntu生成SSH登录证书
生成步骤
要在服务器上生成客户端登录证书,可以按照以下步骤进行操作:
登录到目标服务器:使用SSH客户端通过用户名和密码登录到目标服务器。例如:
检查是否已存在SSH密钥对:在服务器上检查是否已经存在SSH密钥对。默认情况下,密钥对存储在
~/.ssh
目录下的id_rsa
和id_rsa.pub
文件中。如果文件不存在,可以跳过此步骤,直接进行下一步生成密钥对。
生成SSH密钥对:如果在服务器上没有SSH密钥对,可以使用
ssh-keygen
命令生成。执行以下命令:程序将提示你选择密钥文件的存储路径和密码等选项。你可以选择默认值,即按回车键接受。
生成证书签名请求:使用生成的公钥文件创建证书签名请求。执行以下命令:
这将在
~/.ssh
目录下生成一个名为id_rsa-cert.pub
的证书签名请求文件。确保sshd服务器已配置:在目标服务器上,确保OpenSSH服务器已正确配置以接受证书登录。打开
/etc/ssh/sshd_config
文件,确认以下配置项是否存在并启用:如果不存在,可以使用文本编辑器进行添加或修改。保存文件并重新启动sshd服务。
分发证书:将生成的证书签名请求文件(
id_rsa-cert.pub
)复制到目标服务器的/etc/ssh/ca.pub
文件。执行以下命令:这将把证书签名请求复制到服务器的CA密钥文件中。
配置用户授权:为每个用户配置授权文件以允许使用证书登录。创建
/etc/ssh/principals/username
文件(username
是实际用户名),并将用户的登录证书主体添加到文件中。这将为用户名创建一个授权文件,并将用户名写入其中。
重启sshd服务:完成上述配置后,重启sshd服务以使更改生效。
现在,你的服务器已经配置好了生成和使用客户端登录证书。
证书分发
下面是一个Shell脚本示例,可以用于生成和分发SSH客户端登录证书到sshd服务器。
在使用这个脚本之前,请确保已经安装了ssh-keygen
和sshpass
工具。你需要修改脚本中的以下几个变量:
SSH_SERVER
:sshd服务器的地址。SSH_USERNAME
:登录sshd服务器的用户名。SSH_PASSWORD
:登录sshd服务器的密码。CERTIFICATE_NAME
:生成的证书名称。VALIDITY_PERIOD
:证书的有效期限。PRINCIPAL
:证书的主体,通常是用户名。
运行脚本之前,请给予执行权限:
然后运行脚本:
脚本将生成SSH密钥对,并创建证书签名请求。接着,它会使用sshpass
工具将证书发送到指定的sshd服务器。请确保将sshpass
的安全性考虑在内,因为它需要将密码以明文形式传递给ssh-copy-id
命令。