Ubuntu生成SSH登录证书

生成步骤

要在服务器上生成客户端登录证书,可以按照以下步骤进行操作:

  1. 登录到目标服务器:使用SSH客户端通过用户名和密码登录到目标服务器。例如:

    ssh username@server_ip
  2. 检查是否已存在SSH密钥对:在服务器上检查是否已经存在SSH密钥对。默认情况下,密钥对存储在~/.ssh目录下的id_rsaid_rsa.pub文件中。

    ls ~/.ssh/id_rsa*

    如果文件不存在,可以跳过此步骤,直接进行下一步生成密钥对。

  3. 生成SSH密钥对:如果在服务器上没有SSH密钥对,可以使用ssh-keygen命令生成。执行以下命令:

    ssh-keygen -t rsa -b 4096

    程序将提示你选择密钥文件的存储路径和密码等选项。你可以选择默认值,即按回车键接受。

  4. 生成证书签名请求:使用生成的公钥文件创建证书签名请求。执行以下命令:

    ssh-keygen -s ~/.ssh/id_rsa.pub -I certificate_name -n username -V +52w ~/.ssh/id_rsa-cert.pub

    这将在~/.ssh目录下生成一个名为id_rsa-cert.pub的证书签名请求文件。

  5. 确保sshd服务器已配置:在目标服务器上,确保OpenSSH服务器已正确配置以接受证书登录。打开/etc/ssh/sshd_config文件,确认以下配置项是否存在并启用:

    TrustedUserCAKeys /etc/ssh/ca.pub
    AuthorizedPrincipalsFile /etc/ssh/principals/%u

    如果不存在,可以使用文本编辑器进行添加或修改。保存文件并重新启动sshd服务。

  6. 分发证书:将生成的证书签名请求文件(id_rsa-cert.pub)复制到目标服务器的/etc/ssh/ca.pub文件。执行以下命令:

    sudo cp ~/.ssh/id_rsa-cert.pub /etc/ssh/ca.pub

    这将把证书签名请求复制到服务器的CA密钥文件中。

  7. 配置用户授权:为每个用户配置授权文件以允许使用证书登录。创建/etc/ssh/principals/username文件(username是实际用户名),并将用户的登录证书主体添加到文件中。

    sudo mkdir /etc/ssh/principals
    sudo echo "username" | sudo tee -a /etc/ssh/principals/username

    这将为用户名创建一个授权文件,并将用户名写入其中。

  8. 重启sshd服务:完成上述配置后,重启sshd服务以使更改生效。

    sudo service ssh restart

现在,你的服务器已经配置好了生成和使用客户端登录证书。

证书分发

下面是一个Shell脚本示例,可以用于生成和分发SSH客户端登录证书到sshd服务器。

#!/bin/bash

# 指定sshd服务器的地址和登录凭证
SSH_SERVER="your_ssh_server"
SSH_USERNAME="your_ssh_username"
SSH_PASSWORD="your_ssh_password"

# 指定生成证书的相关信息
CERTIFICATE_NAME="certificate_name"
VALIDITY_PERIOD="+52w"
PRINCIPAL="username"

# 生成SSH密钥对
echo "Generating SSH key pair..."
ssh-keygen -t rsa -b 4096 -N '' -f ~/.ssh/id_rsa
echo "SSH key pair generated."

# 创建证书签名请求
echo "Creating certificate signing request..."
ssh-keygen -s ~/.ssh/id_rsa -I "$CERTIFICATE_NAME" -n "$PRINCIPAL" -V "$VALIDITY_PERIOD" ~/.ssh/id_rsa-cert.pub
echo "Certificate signing request created."

# 将证书发送到sshd服务器
echo "Sending certificate to SSH server..."
sshpass -p "$SSH_PASSWORD" ssh-copy-id -i ~/.ssh/id_rsa-cert.pub -f "$SSH_USERNAME@$SSH_SERVER"
echo "Certificate sent to SSH server."

echo "Done."

在使用这个脚本之前,请确保已经安装了ssh-keygensshpass工具。你需要修改脚本中的以下几个变量:

  • SSH_SERVER:sshd服务器的地址。
  • SSH_USERNAME:登录sshd服务器的用户名。
  • SSH_PASSWORD:登录sshd服务器的密码。
  • CERTIFICATE_NAME:生成的证书名称。
  • VALIDITY_PERIOD:证书的有效期限。
  • PRINCIPAL:证书的主体,通常是用户名。

运行脚本之前,请给予执行权限:

chmod +x generate_and_distribute_certificate.sh

然后运行脚本:

./generate_and_distribute_certificate.sh

脚本将生成SSH密钥对,并创建证书签名请求。接着,它会使用sshpass工具将证书发送到指定的sshd服务器。请确保将sshpass的安全性考虑在内,因为它需要将密码以明文形式传递给ssh-copy-id命令。


Ubuntu生成SSH登录证书
https://blog.cikaros.top/doc/825d0365.html
作者
Cikaros
发布于
2023年5月25日
许可协议