-o password_stdin
dường như không hoạt động trên tất cả các hệ thống, ví dụ freeBSD. v.v ...
Bạn cũng có thể sử dụng expect
Trình thông dịch, nó nên hoạt động với sshfs và nên thực hiện thủ thuật.
Một giải pháp khác là sshpass
, ví dụ, giả sử bạn đang sao lưu thư mục / var / www
Sao lưu:
name=$(date '+%y-%m-%d')
mkdir /backup/$name && tar -czvf /backup/$name/"$name.tar.gz" /var/www
tải tập tin sao lưu lên máy chủ sao lưu
sshpass -p "your_password" scp -r backup_user@target_ip:/home/ /backup/$name
Vì vậy, nó sẽ tải lên thư mục với bản sao lưu ngày hôm nay
Nhưng vẫn như đã nói, cách tốt nhất (an toàn và đơn giản) sẽ là sử dụng cặp khóa ssh
Điều bất tiện duy nhất là bạn phải trải qua quá trình tạo khóa một lần trên mọi máy chủ bạn cần ghép nối, nhưng tốt hơn là giữ mật khẩu ở định dạng văn bản thuần túy trên tất cả các máy chủ bạn muốn sao lưu :),
Tạo một cặp khóa theo cách thích hợp
Trên máy chủ cục bộ
ssh-keygen -t rsa
Trên máy chủ từ xa
ssh root@remote_servers_ip "mkdir -p .ssh"
Tải các khóa công khai đã tạo lên máy chủ từ xa
cat ~/.ssh/id_rsa.pub | ssh root@remote_servers_ip "cat >> ~/.ssh/authorized_keys"
Đặt quyền trên máy chủ từ xa
ssh root@remote_servers_ip "chmod 700 ~/.ssh; chmod 640 ~/.ssh/authorized_keys"
Đăng nhập
ssh root@remote_servers_ip
Kích hoạt giao thức SSH v2
bỏ ghi chú "Giao thức 2" trong / etc / ssh / sshd_config
cho phép ủy quyền khóa công khai trong sshd
uncomment "PubkeyAuthentication yes" trong / etc / ssh / sshd_config
Nếu StrictModes được đặt thành có trong / etc / ssh / sshd_config thì
restorecon -Rv ~/.ssh