🔑 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
-
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
-
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
-
CI/CD Pipeline
- Tự động triển khai code
- Cập nhật cấu hình
- Khởi động lại service
-
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