#!/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"