Самый простой способ запрашивать пароль pypass каждый раз, когда вы переносите или входите в систему ssh, - это создать ключ, вот как вы можете сделать это за 2 шага brightery.com/en/post/…
Мухаммад Эль-Саид
Ответы:
44
Вы должны использовать ключевой файл без парольной фразы для входа по ssh по сценарию. Очевидно, что это угроза безопасности, позаботьтесь о том, чтобы сам ключевой файл был должным образом защищен.
Следует отметить, что это не всегда возможно (например, многие реализации ssh-сервера для Android весьма ограничены).
Ponkadoodle
@Ponkadoodle OP - это запросы на стороне клиента, а не на стороне сервера. ssh -iвсегда должно быть возможно на стороне клиента. Вы имеете в виду, что сервер может поддерживать не все типы ключей (например, ECDSA)? Однако это не будет большой проблемой, это просто случай использования ssh-keygen -t. Я что-то упускаю?
Джонатан Х
1
Хотя поначалу это может показаться проблемой, это правильный ответ. Пароли являются конфиденциальной информацией, и их нельзя хранить в открытом виде или использовать в программах по неосторожности. Вот для чего нужны ключевые файлы; просто узнайте о файлах идентификации rsync -eиssh -i .
Я знаю, что это не лучшая практика, но у меня есть NAS с поврежденным SSHD, который не выполняет аутентификацию на основе ключей. Этот ответ был недостающей частью моей головоломки с автоматическим резервным копированием. Итак, +1 за ответ в крайнем случае
Майк Госсманн
8
Если вы не можете использовать файл_ключи, но не хотите , чтобы включить пароль в команде, вы можете записать его во временный файл и включить его , как это: sshpass -p`cat .password` ssh [...]. Затем защитите свой .passwordфайл, chmod 400 .passwordчтобы только ваш пользователь мог его прочитать.
lutuh
5
Для полноты, в случае ssh'ing на удаленный сервер, src_pathдолжен быть server: path, например:server01.mydomain.local:/path/to/folder
harperville
это определенно правильный ответ! это позволяет вам создавать сценарии без магии ssh, просто создавая сценарий. ;) Престижность @Rajendra
originalfafa
1
так как -aвключение rsync включает -rlptgoD, вы можете сократить команду следующим образом:rsync -az ...
Jannie Theunissen
24
Вы можете избежать запроса пароля по rsyncкоманде, установив в переменной среды RSYNC_PASSWORDпароль, который вы хотите использовать, или используя --password-fileопцию.
работает только в том случае, если на целевом сервере запущен демон rsync
Darryl Hebbes
4
Несмотря на то, что этот ответ не помогает, если не использовать демон rsync, Google посадил меня сюда, и это было именно то, что мне нужно. Для меня мне нужен прямой rsync в rsyncd, без ssh. Я просто использовал опцию файла паролей и отлично работал со сценарием.
gregthegeek
15
Если вы не можете использовать открытый / закрытый ключи, вы можете использовать expect:
Вам нужно будет заменить SRC и DEST обычными параметрами источника и назначения rsync и заменить PASS своим паролем. Просто убедитесь, что этот файл надежно хранится!
Если я использую ключ с ssh, я пишу: ssh u @ serv -i ./rsa Но как это сделать в rsync?
liysd
2
Если вы поместите ключ в каталог .ssh и дадите ему стандартное имя (обычно id_rsa / id_rsa.pub), он будет автоматически выбран rsync.
Craig Trader
6
Еще одна интересная возможность:
сгенерировать пару ключей RSA или DSA (как было описано)
поставить публичный ключ на хост (как уже было описано)
бегать:
rsync --partial --progress --rsh = "ssh -i dsa_private_file" имя_хоста @ хост: / home / me / d.
Примечание: -i dsa_private_file, который является вашим закрытым ключом RSA / DSA
По сути, этот подход очень похож на тот, который описал @Mad Scientist, однако вам не нужно копировать свой закрытый ключ в ~ / .ssh. Другими словами, это полезно для специальных задач (одноразовый доступ без пароля)
-a уже подразумевает -rlptgoD, и в целом было бы гораздо полезнее иметь здесь сокращенную командную строку.
Christian
4
Автоматический ввод пароля для команды rsync затруднен. Мое простое решение во избежание этой проблемы - смонтировать папку для резервного копирования. Затем используйте локальную команду rsync для резервного копирования смонтированной папки.
mount -t cifs //server/source/ /mnt/source-tmp -o username=Username,password=password
rsync -a /mnt/source-tmp /media/destination/
umount /mnt/source-tmp
Официальное решение (и другие) были неполными, когда я впервые посетил его, поэтому я вернулся, спустя годы, чтобы опубликовать этот альтернативный подход на случай, если здесь появятся какие-либо другие, намеревающиеся использовать пару открытого / закрытого ключей:
Выполните это с целевой машины резервного копирования, которая перетаскивает из источника в целевую резервную копию.
Если вы все еще получаете запрос на ввод пароля, вам необходимо проверить свою конфигурацию ssh /etc/ssh/sshd_configи убедиться, что у каждого пользователя в источнике и целевом объекте есть соответствующий открытый ключ ssh других, отправив каждому из них ssh-copy-id user@10.9.9.3.
(Опять же, это для использования пар ключей ssh без пароля в качестве альтернативного подхода, а не для передачи пароля через файл.)
И важное замечание: в примере с альтернативным портом вы направляете ssh в свой файл с закрытым ключом, и когда он выполняет команду на цели, он аутентифицируется по своему открытому ключу.
oemb1905 07
-1
Следуя идее Эндрю Сифорда, это делается с помощью sshfs:
Ответы:
Вы должны использовать ключевой файл без парольной фразы для входа по ssh по сценарию. Очевидно, что это угроза безопасности, позаботьтесь о том, чтобы сам ключевой файл был должным образом защищен.
Инструкция по настройке беспарольного доступа по ssh
источник
ssh -i
всегда должно быть возможно на стороне клиента. Вы имеете в виду, что сервер может поддерживать не все типы ключей (например, ECDSA)? Однако это не будет большой проблемой, это просто случай использованияssh-keygen -t
. Я что-то упускаю?rsync -e
иssh -i
.Используйте неинтерактивную утилиту поставщика паролей sshpass "sshpass"
На Ubuntu
Команда для rsync
источник
sshpass -p`cat .password` ssh [...]
. Затем защитите свой.password
файл,chmod 400 .password
чтобы только ваш пользователь мог его прочитать.src_path
должен быть server: path, например:server01.mydomain.local:/path/to/folder
-a
включение rsync включает-rlptgoD
, вы можете сократить команду следующим образом:rsync -az ...
Вы можете избежать запроса пароля по
rsync
команде, установив в переменной средыRSYNC_PASSWORD
пароль, который вы хотите использовать, или используя--password-file
опцию.источник
Если вы не можете использовать открытый / закрытый ключи, вы можете использовать expect:
Вам нужно будет заменить SRC и DEST обычными параметрами источника и назначения rsync и заменить PASS своим паролем. Просто убедитесь, что этот файл надежно хранится!
источник
Red Hat Enterprise Linux Server release 5.11 (Tikanga)
У меня это работает так:
источник
remote_port_ssh
было установлено? Это похоже на заполнитель для фактического значения.Используйте ключ ssh.
Посмотрите на
ssh-keygen
иssh-copy-id
.После этого вы можете использовать
rsync
такой способ:источник
Еще одна интересная возможность:
Примечание: -i dsa_private_file, который является вашим закрытым ключом RSA / DSA
По сути, этот подход очень похож на тот, который описал @Mad Scientist, однако вам не нужно копировать свой закрытый ключ в ~ / .ssh. Другими словами, это полезно для специальных задач (одноразовый доступ без пароля)
источник
Для меня работает следующее:
Мне пришлось установить
sshpass
источник
Автоматический ввод пароля для команды rsync затруднен. Мое простое решение во избежание этой проблемы - смонтировать папку для резервного копирования. Затем используйте локальную команду rsync для резервного копирования смонтированной папки.
источник
Хотя вы уже реализовали это к настоящему времени,
вы также можете использовать любую ожидаемую реализацию (вы найдете альтернативы в Perl, Python: pexpect, paramiko и т. д.)
источник
Я использую для этого файл VBScript на платформе Windows, он меня очень хорошо обслуживает.
источник
Официальное решение (и другие) были неполными, когда я впервые посетил его, поэтому я вернулся, спустя годы, чтобы опубликовать этот альтернативный подход на случай, если здесь появятся какие-либо другие, намеревающиеся использовать пару открытого / закрытого ключей:
Выполните это с целевой машины резервного копирования, которая перетаскивает из источника в целевую резервную копию.
rsync -av --delete -e 'ssh -p 59333 -i /home/user/.ssh/id_rsa' user@10.9.9.3:/home/user/Server/ /home/keith/Server/
Выполните это с исходной машины, которая отправляет резервную копию из источника в целевую.
rsync -av --delete -e 'ssh -p 59333 -i /home/user/.ssh/id_rsa' /home/user/Server/ user@10.9.9.3:/home/user/Server/
И, если вы не используете альтернативный порт для ssh, рассмотрите более элегантные примеры ниже:
Выполните это с целевой машины резервного копирования, которая перетаскивает из источника в целевую резервную копию:
sudo rsync -avi --delete user@10.9.9.3:/var/www/ /media/sdb1/backups/www/
Выполните это с исходной машины, которая отправляет резервную копию из источника в целевую:
sudo rsync -avi --delete /media/sdb1/backups/www/ user@10.9.9.3:/var/www/
Если вы все еще получаете запрос на ввод пароля, вам необходимо проверить свою конфигурацию ssh
/etc/ssh/sshd_config
и убедиться, что у каждого пользователя в источнике и целевом объекте есть соответствующий открытый ключ ssh других, отправив каждому из нихssh-copy-id user@10.9.9.3
.(Опять же, это для использования пар ключей ssh без пароля в качестве альтернативного подхода, а не для передачи пароля через файл.)
источник
Следуя идее Эндрю Сифорда, это делается с помощью sshfs:
источник