-o password_stdin
похоже не работает на всех системах, например на freeBSD. и т.д.
Вы также можете использовать expect
Интерпретатор, он должен работать с sshfs и делать свое дело.
Другое решение sshpass
, например, скажем, что вы создаете резервную копию каталога / var / www
Резервное копирование:
name=$(date '+%y-%m-%d')
mkdir /backup/$name && tar -czvf /backup/$name/"$name.tar.gz" /var/www
загрузка файла резервной копии на сервер резервного копирования
sshpass -p "your_password" scp -r backup_user@target_ip:/home/ /backup/$name
Таким образом, он будет загружать каталог с сегодняшним резервным копированием.
Но все же, как было сказано выше, лучший (безопасный и простой) способ - использовать пару ключей ssh
. Единственное неудобство заключается в том, что вам придется проходить процесс генерации ключа один раз на каждом сервере. вам нужно создать пару, но это лучше, чем хранить пароль в текстовом формате на всех серверах, для которых вы хотите создать резервную копию :),
правильно создать пару ключей
На локальном сервере
ssh-keygen -t rsa
На удаленном сервере
ssh root@remote_servers_ip "mkdir -p .ssh"
Загрузка сгенерированных открытых ключей на удаленный сервер
cat ~/.ssh/id_rsa.pub | ssh root@remote_servers_ip "cat >> ~/.ssh/authorized_keys"
Установить разрешения на удаленном сервере
ssh root@remote_servers_ip "chmod 700 ~/.ssh; chmod 640 ~/.ssh/authorized_keys"
Авторизоваться
ssh root@remote_servers_ip
Включение протокола SSH v2
раскомментируйте "Протокол 2" в / etc / ssh / sshd_config
включение авторизации с открытым ключом в sshd
раскомментируйте "PubkeyAuthentication yes" в / etc / ssh / sshd_config
Если StrictModes установлен в yes в / etc / ssh / sshd_config, тогда
restorecon -Rv ~/.ssh