@@ -5,45 +5,74 @@ metadata:
55data :
66 entrypoint.sh : |
77 #!/bin/bash
8+ set -euo pipefail
89
9- echo "Ensuring SSH keys directory exists at /home/dev/ssh_keys."
10- mkdir -p /home/dev/ssh_keys
10+ SSH_KEYS_DIR=/home/dev/ssh_keys
11+ RUN_DIR=/home/dev/run
12+ PID_FILE=$RUN_DIR/sshd.pid
13+ PORT=2222
1114
12- # Generate keys if they do not exist
13- if [ ! -f /home/dev/ssh_keys/ssh_host_rsa_key ]; then
14- echo "Generating new SSH host RSA key."
15- ssh-keygen -t rsa -f /home/dev/ssh_keys/ssh_host_rsa_key -N ''
16- fi
17- if [ ! -f /home/dev/ssh_keys/ssh_host_ecdsa_key ]; then
18- echo "Generating new SSH host ECDSA key."
19- ssh-keygen -t ecdsa -f /home/dev/ssh_keys/ssh_host_ecdsa_key -N ''
20- fi
21- if [ ! -f /home/dev/ssh_keys/ssh_host_ed25519_key ]; then
22- echo "Generating new SSH host ED25519 key."
23- ssh-keygen -t ed25519 -f /home/dev/ssh_keys/ssh_host_ed25519_key -N ''
24- fi
15+ echo "Ensuring SSH keys directory exists at $SSH_KEYS_DIR."
16+ mkdir -p "$SSH_KEYS_DIR"
17+
18+ # Generate keys if missing
19+ for keytype in rsa ecdsa ed25519; do
20+ keyfile="$SSH_KEYS_DIR/ssh_host_${keytype}_key"
21+ if [ ! -f "$keyfile" ]; then
22+ echo "Generating new SSH host $keytype key."
23+ ssh-keygen -t "$keytype" -f "$keyfile" -N '' >/dev/null
24+ fi
25+ done
2526
26- chmod 600 /home/dev/ssh_keys /ssh_host_*
27+ chmod 600 "$SSH_KEYS_DIR" /ssh_host_*
2728
28- echo "Ensuring run directory exists at /home/dev/run ."
29- mkdir -p /home/dev/run
29+ echo "Ensuring run directory exists at $RUN_DIR ."
30+ mkdir -p "$RUN_DIR"
3031
3132 echo "Currently running sshd processes:"
32- ps aux | grep sshd
33+ pgrep sshd || echo "No sshd processes found."
3334
3435 echo "Killing any existing sshd processes..."
35- for pid in $(ps aux | grep sshd | grep -v grep | awk '{print $2}'); do
36- echo "Killing sshd pid $pid"
37- kill $pid
38- done
36+ pids=$(pgrep sshd || true)
37+ if [ -n "$pids" ]; then
38+ echo "Found sshd PIDs: $pids"
39+ kill $pids
40+ # Wait max 5s for sshd to stop
41+ timeout=5
42+ while pgrep sshd >/dev/null && [ $timeout -gt 0 ]; do
43+ sleep 1
44+ timeout=$((timeout-1))
45+ done
46+ if pgrep sshd >/dev/null; then
47+ echo "sshd still running, sending SIGKILL"
48+ pkill -9 sshd
49+ fi
50+ else
51+ echo "No sshd processes to kill."
52+ fi
3953
4054 echo "Removing stale PID file if exists..."
41- rm -f /home/dev/run/sshd.pid
55+ rm -f "$PID_FILE"
56+
57+ # Check if port is free (requires netstat or ss)
58+ if command -v ss >/dev/null; then
59+ if ss -tuln | grep -q ":$PORT "; then
60+ echo "ERROR: Port $PORT is still in use, aborting start."
61+ exit 1
62+ fi
63+ elif command -v netstat >/dev/null; then
64+ if netstat -tuln | grep -q ":$PORT "; then
65+ echo "ERROR: Port $PORT is still in use, aborting start."
66+ exit 1
67+ fi
68+ else
69+ echo "WARNING: Could not check port usage (no ss/netstat found)."
70+ fi
4271
43- echo "Starting SSH service..."
72+ echo "Starting SSH service on port $PORT ..."
4473 exec /usr/sbin/sshd -D -f /etc/ssh/sshd_config \
45- -o Port=2222 \
46- -o HostKey=/home/dev/ssh_keys /ssh_host_ed25519_key \
47- -o HostKey=/home/dev/ssh_keys /ssh_host_rsa_key \
48- -o HostKey=/home/dev/ssh_keys /ssh_host_ecdsa_key \
49- -o PidFile=/home/dev/run/sshd.pid
74+ -o Port=$PORT \
75+ -o HostKey=$SSH_KEYS_DIR /ssh_host_ed25519_key \
76+ -o HostKey=$SSH_KEYS_DIR /ssh_host_rsa_key \
77+ -o HostKey=$SSH_KEYS_DIR /ssh_host_ecdsa_key \
78+ -o PidFile=$PID_FILE
0 commit comments