设置 Docker SSH 服务器并生成密钥对
在此步骤中,你将设置一个 Docker 容器来模拟远程 SSH 服务器,并在你的主机上生成一个安全的密钥对。这种方法通过将客户端(你的主机)与服务器(Docker 容器)分离,提供了一个更真实的环境。
由于此环境中已安装 Docker 和 OpenSSH 客户端,你可以直接进行服务器配置。
首先,确保 Docker 服务正在运行:
sudo systemctl start docker
sudo systemctl enable docker
现在,让我们创建一个将作为我们 SSH 服务器的 Docker 容器。我们将使用 Ubuntu 作为基础镜像,并为其配置 SSH 服务器功能。创建一个 Dockerfile:
cat > Dockerfile << 'EOF'
FROM ubuntu:22.04
## 安装 OpenSSH 服务器和其他实用工具
RUN apt-get update && \
apt-get install -y openssh-server nginx sudo && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
## 创建一个用于 SSH 访问的用户
RUN useradd -m -s /bin/bash sshuser && \
echo 'sshuser:password123' | chpasswd && \
usermod -aG sudo sshuser
## 配置 SSH
RUN mkdir /var/run/sshd && \
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin no/' /etc/ssh/sshd_config && \
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config && \
sed -i 's/#PubkeyAuthentication yes/PubkeyAuthentication yes/' /etc/ssh/sshd_config
## 为用户创建 SSH 目录
RUN mkdir -p /home/sshuser/.ssh && \
chown sshuser:sshuser /home/sshuser/.ssh && \
chmod 700 /home/sshuser/.ssh
## 暴露 SSH 端口
EXPOSE 22 80
## 启动 SSH 服务
CMD ["/usr/sbin/sshd", "-D"]
EOF
构建 Docker 镜像:
sudo docker build -t ssh-server .
运行 Docker 容器,将你的主机的端口 2222 映射到容器的端口 22:
sudo docker run -d --name ssh-lab-server -p 2222:22 -p 8080:80 ssh-server
验证容器是否正在运行:
sudo docker ps
你应该会看到显示正在运行的容器的输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
... ssh-server "/usr/sbin/sshd -D" ... Up ... 0.0.0.0:2222->22/tcp, 0.0.0.0:8080->80/tcp ssh-lab-server
接下来,你将生成一个 SSH 密钥对。SSH 密钥提供了一种比仅使用密码更安全的通过 SSH 登录服务器的方式。密钥对包含一个必须保密的 私钥 (private key) 和一个可以共享的 公钥 (public key)。
我们将使用 ssh-keygen 命令创建新的密钥对。我们将密钥类型指定为 rsa,密钥大小指定为 2048 位以获得强大的安全性。-f 标志允许我们为密钥指定文件名,这有助于组织它们。我们将密钥命名为 ~/.ssh/id_rsa_lab_ssh。
运行以下命令。当提示输入密码短语 (passphrase) 时,只需按两次 Enter 键即可继续,无需设置密码短语。在本实验中,为简化起见,我们将省略密码短语,但在实际场景中,你应该始终使用强密码短语来保护你的私钥。
ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa_lab_ssh
该命令将生成密钥对,并显示文件保存位置。
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/labex/.ssh/id_rsa_lab_ssh
Your public key has been saved in /home/labex/.ssh/id_rsa_lab_ssh.pub
The key fingerprint is:
SHA256:... labex@...
The key's randomart image is:
+---[RSA 2048]----+
| .o*+.. |
| . =.o. . |
| . o o. . |
| o . . |
| . S |
| . . . |
| o . |
| o . |
| E . |
+----[SHA256]-----+
为了确认密钥文件已创建,你可以列出 ~/.ssh 目录的内容。你应该会看到你的新私钥 (id_rsa_lab_ssh) 和公钥 (id_rsa_lab_ssh.pub)。
ls -l ~/.ssh/id_rsa_lab_ssh*
输出将类似于此,显示两个新文件:
-rw------- 1 labex labex 1876 ... /home/labex/.ssh/id_rsa_lab_ssh
-rw-r--r-- 1 labex labex 401 ... /home/labex/.ssh/id_rsa_lab_ssh.pub
你现在已成功安装了 SSH 服务器并创建了密钥对,你将在后续步骤中使用它们来配置和测试安全认证。