CCCPaste

92e55229f5e95

#!/usr/bin/env bash
set -euo pipefail

TIMESTAMP=$(date +%Y%m%d-%H%M%S)
SSHD="/etc/ssh/sshd_config"
BACKUP="${SSHD}.backup.${TIMESTAMP}"
REVERT_SCRIPT="/root/sshd_config_revert_${TIMESTAMP}.sh"
FALLBACK_USER="recovery"

if [ "$(id -u)" -ne 0 ]; then
  echo "Script harus dijalankan sebagai root atau via sudo. Mengulangi dengan sudo..."
  exec sudo bash "$0" "$@"
fi

echo "=== Backup konfigurasi SSH ke: $BACKUP ==="
cp -a "$SSHD" "$BACKUP" || { echo "Gagal backup $SSHD"; exit 1; }

# minta password root
while true; do
  read -s -p "Masukkan password baru untuk root: " ROOTPW
  echo
  read -s -p "Konfirmasi password root: " ROOTPW2
  echo
  [ "$ROOTPW" = "$ROOTPW2" ] && break
  echo "Password tidak cocok — coba lagi."
done

# juga buat fallback user untuk mencegah terkunci
if id "$FALLBACK_USER" >/dev/null 2>&1; then
  echo "User fallback '$FALLBACK_USER' sudah ada. Tidak akan dibuat ulang."
  USE_FALLBACK=false
else
  USE_FALLBACK=true
  echo "Membuat user fallback: $FALLBACK_USER (dengan password yang sama seperti root)"
fi

# tulis revert script (agar mudah kembali)
cat > "$REVERT_SCRIPT" <> "$file"
  fi
}

echo "Mengubah konfigurasi SSH..."
replace_or_add "PermitRootLogin" "yes" "$SSHD"
replace_or_add "PasswordAuthentication" "yes" "$SSHD"
replace_or_add "ChallengeResponseAuthentication" "no" "$SSHD"
# biarkan PubkeyAuthentication tetap ada — supaya key tetap bisa dipakai
replace_or_add "PubkeyAuthentication" "yes" "$SSHD"

# pastikan shell root tidak disable
if passwd -S root 2>/dev/null | grep -q "L"; then
  passwd -u root || true
fi

# set password root
echo "root:${ROOTPW}" | chpasswd
echo "Password root di-set."

# buat fallback user (jika perlu) dan tambahkan ke sudo
if [ "$USE_FALLBACK" = true ]; then
  useradd -m -s /bin/bash "$FALLBACK_USER" || true
  echo "${FALLBACK_USER}:${ROOTPW}" | chpasswd
  # tambahkan ke sudoers jika ada grup sudo/wheel
  if getent group sudo >/dev/null 2>&1; then
    usermod -aG sudo "$FALLBACK_USER" || true
  elif getent group wheel >/dev/null 2>&1; then
    usermod -aG wheel "$FALLBACK_USER" || true
  else
    echo "Tidak menemukan grup sudo/wheel; fallback user mungkin tidak punya sudo."
  fi
  echo "Fallback user '${FALLBACK_USER}' dibuat dengan password yang sama seperti root."
  echo "Login test: ssh ${FALLBACK_USER}@"
fi

# restart ssh dengan deteksi systemctl/service
echo "Mere-start layanan SSH..."
if command -v systemctl >/dev/null 2>&1; then
  systemctl restart ssh || systemctl restart sshd || true
else
  service ssh restart || service sshd restart || true
fi

echo
echo "Selesai. Sekarang kamu seharusnya bisa login sebagai root via:"
echo "  ssh root@IP-VPS"
echo
echo "Catatan penting:"
echo " - Jangan tutup sesi SSH yang sedang aktif sampai kamu berhasil login root di sesi baru."
echo " - Jika terjadi masalah, jalankan revert: sudo $REVERT_SCRIPT"
echo " - Setelah berhasil, pertimbangkan untuk menonaktifkan Login root via password untuk keamanan:"
echo "     sudo sed -ri 's|^PermitRootLogin.*|PermitRootLogin prohibit-password|' $SSHD && sudo systemctl restart ssh || sudo service ssh restart"