Fix SSH container setup: Proper SSH configuration, host keys, and retry logic

This commit is contained in:
Sebastian Palencsár
2025-06-18 22:58:17 +02:00
parent b9b492bfcd
commit a70960b81b

View File

@@ -85,32 +85,39 @@ jobs:
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*
RUN useradd -m -s /bin/bash testuser && \ RUN useradd -m -s /bin/bash testuser && \
echo 'testuser ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers echo 'testuser ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
# Configure SSH
RUN mkdir /var/run/sshd
RUN echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config
RUN echo 'PasswordAuthentication no' >> /etc/ssh/sshd_config
RUN echo 'PubkeyAuthentication yes' >> /etc/ssh/sshd_config
RUN ssh-keygen -A
EXPOSE 22
# Start SSH service in foreground to keep container running # Start SSH service in foreground to keep container running
CMD ["/usr/sbin/sshd", "-D"] CMD ["/usr/sbin/sshd", "-D"]
EOF EOF
- name: Run test container - name: Run test container
run: | run: |
# Configure SSH host keys # Generate SSH key
mkdir -p ~/.ssh mkdir -p ~/.ssh
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N "" ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N ""
# Start container
docker run -d --name test-server \ docker run -d --name test-server \
-p 2222:22 \ -p 2222:22 \
test-ubuntu:${{ matrix.ubuntu_version }} test-ubuntu:${{ matrix.ubuntu_version }}
# Wait for container to be ready # Wait for SSH to be ready
sleep 5 sleep 10
# Configure SSH access # Copy SSH key to container
docker exec test-server mkdir -p /home/testuser/.ssh docker exec test-server mkdir -p /home/testuser/.ssh
docker cp ~/.ssh/id_rsa.pub test-server:/home/testuser/.ssh/authorized_keys docker cp ~/.ssh/id_rsa.pub test-server:/home/testuser/.ssh/authorized_keys
docker exec test-server chown -R testuser:testuser /home/testuser/.ssh docker exec test-server chown -R testuser:testuser /home/testuser/.ssh
docker exec test-server chmod 700 /home/testuser/.ssh docker exec test-server chmod 700 /home/testuser/.ssh
docker exec test-server chmod 600 /home/testuser/.ssh/authorized_keys docker exec test-server chmod 600 /home/testuser/.ssh/authorized_keys
docker exec test-server service ssh start
# Check if container is running # Test if container is running
if ! docker ps | grep -q test-server; then if ! docker ps | grep -q test-server; then
echo "Container failed to start, checking logs:" echo "Container failed to start, checking logs:"
docker logs test-server docker logs test-server
@@ -137,9 +144,27 @@ jobs:
- name: Verify basic connectivity - name: Verify basic connectivity
run: | run: |
# Test basic SSH connectivity # Wait for SSH to be fully ready
echo "Testing SSH connectivity..." echo "Waiting for SSH service..."
ssh -o StrictHostKeyChecking=no -p 2222 testuser@localhost "echo 'SSH connection successful'" sleep 5
# Test SSH connectivity with retry
for i in {1..5}; do
echo "SSH connection attempt $i..."
if ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 -p 2222 testuser@localhost "echo 'SSH connection successful'"; then
echo "SSH connection established!"
break
else
echo "SSH connection failed, retrying in 3 seconds..."
sleep 3
fi
if [ $i -eq 5 ]; then
echo "SSH connection failed after 5 attempts"
echo "Container logs:"
docker logs test-server
exit 1
fi
done
# Test basic container functionality # Test basic container functionality
echo "Testing container basics..." echo "Testing container basics..."