Я хочу настроить задание RSync, которое будет подключаться через SSH.
У меня есть мой компьютер ( backup@myhost ) и удаленный хост ( test@remhost ), и мне нужно сделать резервную копию папки ~/something со всем ее содержимым. Пользователь ssh test имеет только доступ на ЧТЕНИЕ ко всем файлам и папкам в папке ~/. Я хочу использовать rsync для копирования папки test@remhost:~/something в папку backup@myhost:~/bak.
Для этой цели я использую следующую команду через BASH в Ubuntu 11.10 (Oneiric):
rsync -avz -e ssh test@remhost:~/something/ ~/bak/
После нажатия Enter я получаю это:
test@remhost's password:
Я ввожу пароль и rsync работает.
Я хочу, чтобы указанная выше команда автоматически вводила пароль и передавала его в качестве параметра или вводила его автоматически и запускала задание.
Я попробовал запустить, rsync -avz -e ssh test:password@remhost:~/something/ ~/bak/
но он все равно запрашивает пароль, и это раздражает.
Я не хочу слышать ни о каких ключах (RSA, DSA или любых других). Мне нужна простая команда, которая бы залогинила меня и сделала бы работу.
РЕДАКТИРОВАТЬ:Возможный сценарий может быть, если аутентификация с открытым ключом отключена и вы не можете это изменить. Например, если вы используете OpenSSH, вам понадобятся права root на сервере, чтобы редактировать файл sshd_config
и добавлять PubkeyAuthentication yes
.
РЕДАКТИРОВАТЬ:Вот что в итоге мне помогло:
sshpass -p 'sshpassword' rsync --progress -avz -e ssh test@remhost:~/something/ ~/bak/
Обратите внимание, что этот метод не считается безопасным, поскольку он отправляет пароль в виде открытого текста и уязвим для атак типа «человек посередине». Рекомендуется использовать аутентификацию ключа для более высокой безопасности.
решение1
может быть, попробовать sshpass.
кажется достаточно простым в использовании... он также доступен через apt.
Я искал что-то подобное до того, как начал копировать ключи, но поскольку ключи у меня и так везде, где они мне нужны, я не стал тратить время на то, чтобы попробовать это.
Обратите внимание на отказ от ответственности в этом руководстве относительно видимости вашего пароля.
Для всех, кому это необходимо:
sshpass -p 'sshpassword' rsync --progress -avz -e ssh test@remhost:~/something/ ~/bak/
решение2
Вариант вашего решения, который более безопасен с точки зрения угроз безопасности, — это сохранение пароля в файле с жесткими правами доступа и использование флага -f
с shpass
:
sshpass -f '/home/me/.password' rsync --progress -avz -e ssh
test@remhost:~/something/ ~/bak/
Разница в том, что при выводе списка запущенных процессов ваш пароль в командной строке не отображается, теперь отображается только путь к файлу, в котором находится ваш пароль.
решение3
Я не могу представить себе ситуацию, в которой аутентификация с открытым ключом без парольной фразы не была бы лучшим решением для автоматизированного входа в систему по протоколу ssh/rsync.
В любом случае, expect
это должно быть способом достичь того, что вы хотите сделать. Вы не можете передать пароль в ssh, но это что-то очень похожее. Как это сделать, дан ответздесь на stackoverflow.
решение4
Это также работает:
system <<~ "RSYNC";
rsync \\
--rsh="sshpass -p '$password' ssh -p 22" \\
--archive \\
--verbose \\
--progress \\
--partial \\
--human-readable \\
"$directory" \\
"$options{host}:${directory}"
RSYNC
т.е. проход sshpass
внутрь --rsh
вместо того, чтобы быть впередиrsync
Этот метод вместе с использованием SSHPASS
переменной окружения описан в разделе «Примеры» руководства: