Linux创建ssh用户
被远程服务器
密钥对
要生成SSH密钥对,可以使用ssh-keygen命令,这是大多数操作系统(Linux、macOS以及Windows 10+的WSL或PowerShell)都内置的工具。以下是生成SSH密钥对的步骤:
- 打开终端(Linux/macOS)或PowerShell/WSL(Windows)
- 输入以下命令并按回车:
ssh-keygen -t ed25519 -C "your_email@example.com"
-
-t ed25519:指定使用Ed25519算法,这是目前推荐的安全算法 -
-C:添加一个注释,通常使用你的邮箱作为标识
-
系统会提示你指定密钥存储位置,按回车使用默认位置(
~/.ssh/id_ed25519) -
接下来会提示你设置密码(可选但推荐):
- 输入密码并按回车
- 再次输入相同密码确认
- 如果你不想设置密码,直接按两次回车
执行完成后,会在.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组,可以按照以下步骤操作:
- 首先创建用户(需要root权限):
sudo useradd -m -s /bin/bash deploy-user
-
-m:为用户创建家目录 -
-s /bin/bash:设置默认shell为bash
- 为该用户设置密码(可选但推荐):
sudo passwd deploy-user
执行后会提示你输入并确认密码
- 将用户添加到docker组:
sudo usermod -aG docker deploy-user
-
-a:追加到指定组,而不是替换用户的现有组 -
-G:指定要加入的附加组
- 生效组配置(用户需要重新登录才能使组变更生效):
# 可以让当前会话立即生效(如果已切换到deploy-user)
newgrp docker
# 或者直接切换到该用户
su - deploy-user
完成以上步骤后,deploy-user用户就拥有了运行docker命令的权限,无需每次使用sudo。
配置SSH授权密钥文件
要为 deploy-user 用户配置 SSH 授权密钥文件(authorized_keys),以便通过 SSH 密钥认证登录,可以按照以下步骤操作:
- 首先切换到
deploy-user用户(如果当前不是该用户):
sudo su - deploy-user
- 创建
.ssh目录(如果不存在)并设置正确权限:
mkdir -p ~/.ssh
chmod 700 ~/.ssh # 确保只有所有者可读写执行
- 创建
authorized_keys文件并设置权限:
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys # 确保只有所有者可读写
-
将公钥添加到
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文件
-
生成
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 }}
评论