Chuyển tới nội dung chính

🔑 Sử Dụng SSHPass

📋 Giới Thiệu

SSHPass là một công cụ dòng lệnh cung cấp mật khẩu cho SSH một cách tự động. Nó giải quyết vấn đề nhập mật khẩu thủ công khi:

  • Kết nối SSH
  • Sử dụng SCP để copy file
  • Sử dụng SFTP để truyền file
  • Thực thi lệnh từ xa qua SSH

Ưu Điểm

  • ✅ Tự động hóa kết nối SSH không cần nhập mật khẩu
  • ✅ Tích hợp dễ dàng vào script
  • ✅ Hỗ trợ nhiều phương thức cung cấp mật khẩu
  • ✅ Có thể kết hợp với các công cụ khác như rsync, scp

Nhược Điểm

  • ⚠️ Rủi ro bảo mật khi lưu mật khẩu trong file hoặc script
  • ⚠️ Không an toàn bằng SSH key authentication
  • ⚠️ Mật khẩu có thể bị lộ trong process list

Các Trường Hợp Sử Dụng

  1. Tự Động Hóa Backup

    • Backup database tự động
    • Sao lưu file tự động
    • Đồng bộ dữ liệu giữa các server
  2. Quản Trị Hệ Thống

    • Cập nhật nhiều server cùng lúc
    • Triển khai ứng dụng tự động
    • Thu thập log và monitoring
  3. CI/CD Pipeline

    • Tự động triển khai code
    • Cập nhật cấu hình
    • Khởi động lại service
  4. Giám Sát Hệ Thống

    • Thu thập metrics
    • Kiểm tra trạng thái server
    • Gửi cảnh báo tự động

⚠️ Cảnh Báo Bảo Mật

Lưu ý quan trọng

SSHPass có thể tiện lợi nhưng tiềm ẩn rủi ro bảo mật (rò rỉ mật khẩu). Hãy cân nhắc kỹ trước khi sử dụng trong môi trường production.

📦 Cài Đặt

# Cài đặt SSHPass
sudo apt -y install sshpass

🛠️ Cách Sử Dụng

1. Sử Dụng Trực Tiếp với Mật Khẩu

# Cú pháp: -p [mật khẩu]
# Thêm StrictHostKeyChecking=no cho lần kết nối đầu tiên
sshpass -p 'your_password' ssh -o StrictHostKeyChecking=no [email protected] hostname
mẹo

Thay your_password bằng mật khẩu thực tế và 192.168.1.100 bằng địa chỉ server của bạn

2. Sử Dụng File Chứa Mật Khẩu

# Tạo file chứa mật khẩu
echo 'your_password' > ~/.ssh/pass.txt

# Đặt quyền phù hợp cho file
chmod 600 ~/.ssh/pass.txt

# Sử dụng file mật khẩu (-f)
sshpass -f ~/.ssh/pass.txt ssh [email protected] hostname

3. Sử Dụng Biến Môi Trường

# Đặt biến môi trường
export SSHPASS='your_password'

# Sử dụng biến môi trường (-e)
sshpass -e ssh [email protected] hostname

🔄 Ví Dụ Thực Tế

1. Script Tự Động Backup

#!/bin/bash
# Backup script sử dụng SSHPass

REMOTE_HOST="192.168.1.100"
REMOTE_USER="backup_user"
REMOTE_PASS="your_backup_password"
BACKUP_DIR="/path/to/backup"

sshpass -p "$REMOTE_PASS" rsync -avz \
-e "ssh -o StrictHostKeyChecking=no" \
$REMOTE_USER@$REMOTE_HOST:$BACKUP_DIR ./backup/

2. Thực Thi Lệnh từ xa

# Thực thi nhiều lệnh
sshpass -p 'your_password' ssh [email protected] '
df -h
free -m
uptime
'

📱 Ứng Dụng Thực Tế

1. Tự Động Hóa Backup Database

#!/bin/bash
# Script backup database tự động

DB_HOST="192.168.1.100"
DB_USER="db_admin"
DB_PASS="your_db_password"
BACKUP_PATH="/backup/mysql"
DATE=$(date +%Y%m%d)

# Backup database và copy qua server backup
mysqldump -h $DB_HOST -u $DB_USER -p$DB_PASS --all-databases | gzip > /tmp/db_$DATE.sql.gz

sshpass -p 'backup_server_pass' scp /tmp/db_$DATE.sql.gz [email protected]:$BACKUP_PATH/

# Xóa file tạm
rm /tmp/db_$DATE.sql.gz

2. Giám Sát Hệ Thống Tự Động

#!/bin/bash
# Script kiểm tra hệ thống nhiều server

# Danh sách server cần kiểm tra
declare -A servers=(
["web01"]="192.168.1.101"
["web02"]="192.168.1.102"
["db01"]="192.168.1.103"
)

# Mật khẩu SSH
SSH_PASS="your_monitor_password"

# Kiểm tra từng server
for server in "${!servers[@]}"; do
echo "Checking $server (${servers[$server]})..."

sshpass -p "$SSH_PASS" ssh -o StrictHostKeyChecking=no \
monitor@${servers[$server]} '
echo "Memory Usage:"
free -h
echo "Disk Usage:"
df -h
echo "Load Average:"
uptime
echo "-------------------"
'
done

3. Triển Khai Ứng Dụng Tự Động

#!/bin/bash
# Script triển khai code tự động

APP_PATH="/var/www/app"
DEPLOY_USER="deployer"
DEPLOY_PASS="your_deploy_password"

# Danh sách server web
WEB_SERVERS=(
"192.168.1.201"
"192.168.1.202"
"192.168.1.203"
)

# Triển khai code lên các server
for server in "${WEB_SERVERS[@]}"; do
echo "Deploying to $server..."

# Copy code mới
sshpass -p "$DEPLOY_PASS" rsync -avz -e "ssh -o StrictHostKeyChecking=no" \
./dist/ $DEPLOY_USER@$server:$APP_PATH/

# Khởi động lại service
sshpass -p "$DEPLOY_PASS" ssh $DEPLOY_USER@$server \
"sudo systemctl restart nginx php-fpm"
done

4. Tự Động Hóa Cập Nhật Hệ Thống

#!/bin/bash
# Script cập nhật hệ thống tự động

SERVER_LIST="/path/to/server_list.txt"
ADMIN_PASS="your_admin_password"

# Đọc danh sách server và thực hiện cập nhật
while IFS= read -r server; do
echo "Updating $server..."

sshpass -p "$ADMIN_PASS" ssh -o StrictHostKeyChecking=no \
admin@$server '
sudo apt update
sudo DEBIAN_FRONTEND=noninteractive apt upgrade -y
sudo apt autoremove -y
if [ -f /var/run/reboot-required ]; then
echo "Reboot required on $HOSTNAME"
fi
'
done < "$SERVER_LIST"
Lưu ý về Bảo Mật
  • Luôn mã hóa các file chứa mật khẩu
  • Sử dụng user với quyền hạn tối thiểu cần thiết
  • Giám sát log để phát hiện sử dụng trái phép
  • Cân nhắc sử dụng SSH key thay vì mật khẩu khi có thể

⚙️ Tùy Chọn Bổ Sung

Tùy ChọnMô Tả
-pChỉ định mật khẩu trực tiếp
-fĐọc mật khẩu từ file
-eĐọc mật khẩu từ biến môi trường SSHPASS
-PChuỗi prompt để nhận dạng yêu cầu mật khẩu

🔒 Các Biện Pháp Bảo Mật

  1. Quyền File:
# Đặt quyền chặt chẽ cho file chứa mật khẩu
chmod 600 ~/.ssh/pass.txt
  1. Mã Hóa:
  • Cân nhắc mã hóa file chứa mật khẩu
  • Sử dụng vault hoặc secret management system
  1. Giới Hạn Truy Cập:
  • Hạn chế quyền thực thi script
  • Giám sát log sử dụng

📚 Tài Liệu Tham Khảo