Langsung ke konten utama

Cara Menggunakan sshpass dengan Rsync

 

Cara Menggunakan sshpass dengan Rsync

Apa itu sshpass?

sshpass adalah tool untuk menyediakan password SSH secara non-interactive (tanpa prompt). Sangat berguna untuk automation script.


INSTALASI SSHPass

Linux (Debian/Ubuntu)

bash
sudo apt-get install sshpass

Linux (CentOS/RHEL)

bash
sudo yum install sshpass

macOS

bash
brew install hudochenkov/sshpass/sshpass
# atau
port install sshpass

METODE PENGGUNAAN SSHPass DENGAN Rsync

1. Method 1: Environment Variable

bash
export SSHPASS="password123"
sshpass -e rsync -avz /local/path/ user@103.115.31.218:/remote/path/

2. Method 2: Password dari File

bash
# Simpan password di file
echo "password123" > /tmp/mypass

# Gunakan dengan rsync
sshpass -f /tmp/mypass rsync -avz /local/path/ user@103.115.31.218:/remote/path/

# Hapus file password setelah digunakan
rm /tmp/mypass

3. Method 3: Password Langsung (TIDAK DISARANKAN)

bash
sshpass -p "password123" rsync -avz /local/path/ user@103.115.31.218:/remote/path/

CONTOH LENGKAP DENGAN RSYNC OPTIONS

Basic Sync dengan Password

bash
sshpass -p "password123" rsync -avz \
  /home/user/documents/ user@103.115.31.218:/backup/documents/

Dengan Progress dan Verbose

bash
sshpass -p "password123" rsync -avz --progress \
  /var/www/html/ user@103.115.31.218:/var/www/backup/

Dengan Custom SSH Port

bash
sshpass -p "password123" rsync -avz -e "ssh -p 2222" \
  /local/data/ user@103.115.31.218:/remote/data/

Dengan Delete Option (Sync Mirror)

bash
sshpass -p "password123" rsync -avz --delete \
  /source/folder/ user@103.115.31.218:/destination/folder/

Dengan Exclude Pattern

bash
sshpass -p "password123" rsync -avz \
  --exclude='*.tmp' --exclude='node_modules' \
  /project/ user@103.115.31.218:/backup/project/

Dengan Bandwidth Limit

bash
sshpass -p "password123" rsync -avz --bwlimit=1000 \
  /large-files/ user@103.115.31.218:/storage/

KEAMANAN YANG LEBIH BAIK

Gunakan File dengan Permission Ketat

bash
# Buat file password
echo "password123" > ~/.sshpass
chmod 600 ~/.sshpass  # Hanya user yang bisa baca

# Gunakan
sshpass -f ~/.sshpass rsync -avz /local/ user@host:/remote/

Atau Lebih Baik Gunakan SSH Key

bash
# Generate SSH key (jika belum punya)
ssh-keygen -t rsa -b 4096

# Copy public key ke server
ssh-copy-id user@103.115.31.218

# Sekarang rsync tanpa password
rsync -avz /local/path/ user@103.115.31.218:/remote/path/

SCRIPT EXAMPLES

Backup Script dengan sshpass

bash
#!/bin/bash

# Variables
SERVER="103.115.31.218"
USER="username"
PASSWORD="password123"
LOCAL_DIR="/home/user/backup/"
REMOTE_DIR="/remote/backup/"

# Backup using rsync with sshpass
sshpass -p "$PASSWORD" rsync -avz \
  --progress \
  --delete \
  --exclude='*.tmp' \
  "$LOCAL_DIR" "$USER@$SERVER:$REMOTE_DIR"

# Check result
if [ $? -eq 0 ]; then
    echo "Backup completed successfully!"
else
    echo "Backup failed!"
    exit 1
fi

Script dengan Password File

bash
#!/bin/bash

PASS_FILE="/home/user/.backup_pass"
REMOTE="user@103.115.31.218"

# Check if password file exists
if [ ! -f "$PASS_FILE" ]; then
    echo "Password file not found!"
    exit 1
fi

# Sync with password file
sshpass -f "$PASS_FILE" rsync -avz \
  --progress \
  --stats \
  /important/data/ "$REMOTE:/backup/data/"

TROUBLESHOOTING

Debug Connection

bash
# Test SSH connection first
sshpass -p "password123" ssh user@103.115.31.218 "echo 'Connected!'"

# Jika gagal, cek verbose
sshpass -p "password123" ssh -vvv user@103.115.31.218

Handle Connection Timeout

bash
sshpass -p "password123" rsync -avz \
  -e "ssh -o ConnectTimeout=10 -o ServerAliveInterval=60" \
  /local/ user@103.115.31.218:/remote/

Rsync dengan Retry

bash
#!/bin/bash
MAX_RETRIES=3
COUNT=0

while [ $COUNT -lt $MAX_RETRIES ]; do
    sshpass -p "password123" rsync -avz /local/ user@host:/remote/
    if [ $? -eq 0 ]; then
        echo "Sync successful!"
        break
    else
        COUNT=$((COUNT+1))
        echo "Attempt $COUNT failed. Retrying..."
        sleep 5
    fi
done

KELEMAHAN SSHPass

Risiko Keamanan:

  • ❌ Password terlihat di command history

  • ❌ Password terlihat di ps aux

  • ❌ Less secure daripada SSH keys

Solusi Lebih Aman:

  1. SSH Keys (recommended)

  2. SSH Agent

  3. Configuration Management Tools (Ansible, etc.)


ALTERNATIF TANKA SSHPass

Gunakan Expect Script

bash
#!/usr/bin/expect

spawn rsync -avz /local/path/ user@103.115.31.218:/remote/path/
expect "password:"
send "password123\r"
expect eof

Atau Setup SSH Key (RECOMMENDED)

bash
# Generate key pair
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

# Copy to remote server
ssh-copy-id user@103.115.31.218

# Now use rsync without password
rsync -avz /local/path/ user@103.115.31.218:/remote/path/

KESIMPULAN

Gunakan sshpass hanya untuk:

  • Testing environment

  • Temporary automation

  • Systems where SSH keys aren't feasible

Untuk production, selalu prefer SSH keys untuk keamanan yang lebih baik!

Komentar

Postingan populer dari blog ini

install dan run virtualbox di ubuntu server

  Berikut adalah beberapa cara untuk menginstall VirtualBox di Ubuntu Server: Metode 1: Install dari Repository Official (Rekomendasi) Langkah 1: Tambahkan Repository VirtualBox bash # Update sistem sudo apt update && sudo apt upgrade -y # Install dependencies sudo apt install -y wget curl gnupg apt-transport-https # Tambahkan key repository VirtualBox wget -O- https://www.virtualbox.org/download/oracle_vbox_2016.asc | sudo gpg --dearmor --yes --output /usr/share/keyrings/oracle-virtualbox-2016.gpg # Alternatif jika perintah di atas gagal: wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add - Langkah 2: Tambahkan repository ke sources list bash # Untuk Ubuntu 22.04/Jammy atau versi terbaru echo "deb [arch=amd64 signed-by=/usr/share/keyrings/oracle-virtualbox-2016.gpg] https://download.virtualbox.org/virtualbox/debian jammy contrib" | sudo tee /etc/apt/sources.list.d/virtualbox.list # Sesuaikan de...

Apa itu Rsync?

  Apa itu Rsync? Rsync (Remote Synchronization) adalah tool powerful untuk sinkronisasi file dan direktori antara lokasi berbeda, baik secara lokal maupun remote. Keunggulan utamanya adalah hanya mentransfer perubahan (delta transfer), membuatnya sangat efisien. Keunggulan Rsync Delta-transfer algorithm - Hanya transfer bagian yang berubah Preserve permissions - Mempertahankan atribut file Compression - Kompresi data selama transfer Partial transfers - Dapat melanjutkan transfer yang terputus Flexible - Bisa lokal dan remote STRUKTUR DASAR bash rsync [ OPTIONS ] SUMBER TUJUAN OPTIONS PALING UMUM 1. Basic Options bash # Archive mode (preserve semua atribut) rsync -a /source/ /dest/ # Verbose (lihat progress) rsync -av /source/ /dest/ # Recursive (untuk direktori) rsync -r /source/ /dest/ # Compression (untuk transfer remote) rsync -z /source/ user@host:/dest/ 2. Kombinasi Umum bash # Kombinasi paling sering digunakan rsync -avz /local/path/ user@remotehost...