/ setup-testnet-ssh.sh
setup-testnet-ssh.sh
 1  #!/bin/bash
 2  set -euo pipefail
 3  
 4  # Setup SSH access for CI runner on Alpha/Delta testnet nodes
 5  # Run as root on the new servers
 6  
 7  echo "=== Alpha/Delta Testnet Node SSH Setup ==="
 8  
 9  # Configuration
10  USER="devops"
11  CI_PUBKEY="ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCu09jlzaMOPmEVjJ3vTJGdZXL5HCIWAAhNI75IwW04Nni27vg6UO0JavPsBQbZwOzQtJoVUbdsR4LkEt8AdSmXUhKCaHqzmOfIXQR6RwG7vJaOSUAjJdRraie9IPiXCTlAeyM+FkWbZ02qUahLIH30cAFGKb6jSzaMKmkSAVO8FV6oE64XinxVbN4xPHmUHV73qAHVxr0EAFKNst4yIg08xN5ulF5bndfVcN/zjQALX9NbqoOQ3mqqrqR1HVveLPKyldkuhQIwTVAVKARHR7vaY8rrWClNkQJBiNExTnAFQKRG+Om8MKpUUzaU2pYywqLoDbgdwo/LReeEaNa7qtni4JMbKO0dtaDnGdEyAoOkVN0CtGOSjUBZN5NZIp0Uk8kAsWLzF8SxKqrxywWoaqliJOl3S2t3HpFCYsU11554nrlXjXiA+XXtadFZisuDVuv5nBrzPIF6Oc9Mlm2Vtv+RnTcTP5qbyICmAgLIJO2NB/YrAcEm6Ke+h4Ew1wU7eGE= devops@ci"
12  
13  # Check if running as root
14  if [ "$EUID" -ne 0 ]; then
15      echo "ERROR: Please run as root"
16      exit 1
17  fi
18  
19  echo "[1/6] Creating user '$USER' if not exists..."
20  if id "$USER" &>/dev/null; then
21      echo "  → User '$USER' already exists"
22  else
23      useradd -m -s /bin/bash "$USER"
24      echo "  → User '$USER' created"
25  fi
26  
27  echo "[2/6] Setting up passwordless sudo..."
28  if [ -f /etc/sudoers.d/$USER ]; then
29      echo "  → Sudo config already exists"
30  else
31      echo "$USER ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/$USER
32      chmod 0440 /etc/sudoers.d/$USER
33      echo "  → Passwordless sudo configured"
34  fi
35  
36  echo "[3/6] Creating .ssh directory..."
37  SSH_DIR="/home/$USER/.ssh"
38  mkdir -p "$SSH_DIR"
39  chmod 700 "$SSH_DIR"
40  chown $USER:$USER "$SSH_DIR"
41  echo "  → .ssh directory ready"
42  
43  echo "[4/6] Adding CI runner public key..."
44  AUTHORIZED_KEYS="$SSH_DIR/authorized_keys"
45  if grep -q "devops@ci" "$AUTHORIZED_KEYS" 2>/dev/null; then
46      echo "  → CI key already present"
47  else
48      echo "$CI_PUBKEY" >> "$AUTHORIZED_KEYS"
49      chmod 600 "$AUTHORIZED_KEYS"
50      chown $USER:$USER "$AUTHORIZED_KEYS"
51      echo "  → CI key added"
52  fi
53  
54  echo "[5/6] Configuring SSH daemon..."
55  SSHD_CONFIG="/etc/ssh/sshd_config"
56  # Backup original config
57  if [ ! -f "$SSHD_CONFIG.backup" ]; then
58      cp "$SSHD_CONFIG" "$SSHD_CONFIG.backup"
59  fi
60  
61  # Ensure pubkey authentication is enabled
62  grep -q "^PubkeyAuthentication yes" "$SSHD_CONFIG" || \
63      echo "PubkeyAuthentication yes" >> "$SSHD_CONFIG"
64  
65  # Optional hardening (uncomment if needed)
66  # sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' "$SSHD_CONFIG"
67  # sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' "$SSHD_CONFIG"
68  
69  echo "  → SSH config updated"
70  
71  echo "[6/6] Restarting SSH daemon..."
72  if systemctl is-active --quiet sshd; then
73      systemctl restart sshd
74      echo "  → sshd restarted"
75  elif systemctl is-active --quiet ssh; then
76      systemctl restart ssh
77      echo "  → ssh restarted"
78  else
79      echo "  ⚠ Could not detect SSH service name, please restart manually"
80  fi
81  
82  echo ""
83  echo "✓ Setup complete!"
84  echo ""
85  echo "Next steps:"
86  echo "  1. Test connection: ssh $USER@$(hostname -I | awk '{print $1}')"
87  echo "  2. Verify sudo: ssh $USER@$(hostname -I | awk '{print $1}') sudo whoami"
88  echo ""
89  echo "Server hostname: $(hostname)"
90  echo "Server IP: $(hostname -I | awk '{print $1}')"
91  echo ""