Linux创建ssh用户

被远程服务器

密钥对

  要生成SSH密钥对,可以使用ssh-keygen命令,这是大多数操作系统(Linux、macOS以及Windows 10+的WSL或PowerShell)都内置的工具。以下是生成SSH密钥对的步骤:

  1. 打开终端(Linux/macOS)或PowerShell/WSL(Windows)
  2. 输入以下命令并按回车:
ssh-keygen -t ed25519 -C "your_email@example.com"
  • -t ed25519:指定使用Ed25519算法,这是目前推荐的安全算法
  • -C:添加一个注释,通常使用你的邮箱作为标识
  1. 系统会提示你指定密钥存储位置,按回车使用默认位置(~/.ssh/id_ed25519

  2. 接下来会提示你设置密码(可选但推荐):

    • 输入密码并按回车
    • 再次输入相同密码确认
    • 如果你不想设置密码,直接按两次回车

  执行完成后,会在.ssh目录下生成两个文件:

  • id_ed25519:私钥(请妥善保管,不要分享给任何人)
  • id_ed25519.pub:公钥(可以分享给需要的服务或服务器)

  如果你的系统不支持Ed25519算法(较旧的系统),可以使用RSA算法作为替代:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

  这会生成id_rsa​(私钥)和id_rsa.pub(公钥)文件。

创建用户

  要在Linux系统中创建deploy-user​用户并将其添加到docker组,可以按照以下步骤操作:

  1. 首先创建用户(需要root权限):
sudo useradd -m -s /bin/bash deploy-user
  • -m:为用户创建家目录
  • -s /bin/bash:设置默认shell为bash
  1. 为该用户设置密码(可选但推荐):
sudo passwd deploy-user

  执行后会提示你输入并确认密码

  1. 将用户添加到docker组:
sudo usermod -aG docker deploy-user
  • -a:追加到指定组,而不是替换用户的现有组
  • -G:指定要加入的附加组
  1. 生效组配置(用户需要重新登录才能使组变更生效):
# 可以让当前会话立即生效(如果已切换到deploy-user)
newgrp docker

# 或者直接切换到该用户
su - deploy-user

  完成以上步骤后,deploy-user​用户就拥有了运行docker命令的权限,无需每次使用sudo

配置SSH授权密钥文件

  要为 deploy-user​ 用户配置 SSH 授权密钥文件(authorized_keys),以便通过 SSH 密钥认证登录,可以按照以下步骤操作:

  1. 首先切换到 deploy-user 用户(如果当前不是该用户):
sudo su - deploy-user
  1. 创建 .ssh 目录(如果不存在)并设置正确权限:
mkdir -p ~/.ssh
chmod 700 ~/.ssh  # 确保只有所有者可读写执行
  1. 创建 authorized_keys 文件并设置权限:
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys  # 确保只有所有者可读写
  1. 将公钥添加到 authorized_keys 文件中:

    • 如果你已经有公钥内容,可以直接粘贴进去:

      nano ~/.ssh/authorized_keys  # 打开文件后粘贴公钥,按 Ctrl+O 保存,Ctrl+X 退出
      
    • 或者从本地文件导入(如果公钥在服务器上):

      cat /path/to/your/public_key.pub >> ~/.ssh/authorized_keys
      

  完成后,拥有对应私钥的客户端就可以通过 SSH 免密码登录 deploy-user 用户了。

  权限说明:

  • .ssh​ 目录必须是 700 权限(仅所有者可访问)
  • authorized_keys​ 文件必须是 600 权限(仅所有者可读写)
    这是 SSH 安全机制的要求,权限过宽会导致密钥认证失效。

创建known_hosts文件

  1. 生成known_hosts文件

    ssh-keyscan deploy-user所在服务器的IP地址(比如:192.168.31.212) > known_hosts_content
    

远程服务器

配置SSH密钥与known_hosts文件

          mkdir -p ~/.ssh
          echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa
          chmod 600 ~/.ssh/id_rsa
          echo "${{ secrets.SSH_KNOWN_HOSTS }}" >> ~/.ssh/known_hosts
          chmod 700 ~/.ssh
          chmod 600 ~/.ssh/known_hosts

远程服务器连接被远程服务器

 ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no ${{ vars.SSH_USER }}@${{ vars.SERVER_IP }}

  ‍