У нас есть несколько сценариев синхронизации для клиента, отправляющего файлы с помощью scp на удаленный сервер, администрируемый одним из их провайдеров. Недавно они закрыли его, и новый, который они предоставили, не разрешает scp, только sftp (нет возможности получить оболочку на удаленном сервере, поэтому scp / rsync не может работать).
Есть ли простой способ заменить scp в скриптах на sftp? Думаю, проще всего было бы использовать sshfs и использовать cp вместо scp, но это очень уродливо.
Похоже, что sftp можно передать файл с командами в нем с помощью -b, но это означает перекодирование частей скриптов. Мне было интересно, есть ли способ использовать sftp в качестве замены scp или какой-либо другой пакет, который обеспечивал бы аналогичную функциональность? (то есть sftp / source user @ remote: / dest или что-то в этом роде, было бы идеально, если бы я мог просто выполнить сценарии, чтобы заменить только команду)
Спасибо
Rsync через sftp или chroot sftp
Редактировать: Чтобы было ясно, LFTP клиент поддерживает множество протоколов, включая FTP, HTTP, FISH, SFTP, HTTPS, FTPS и BitTorrent. В этом примере мы используем SFTP. Имя клиента вызвало некоторое замешательство у людей, читающих этот пост.
Ты можешь использовать lftp
и это зеркальная подсистема для репликации поведения rsync через SFTP. Это также работает в среде chroot.
lftp -u username, \
-e "set net:timeout 4;set net:max-retries 6;mirror -R --parallel=8 --no-perms --newer-than=now-2days --only-newer /source/ /source/;bye" sftp://hostname.domain
В этом примере я не указал пароль, потому что у нас есть доверительный ключ SSH для целевого хоста.
Примечание: В -R
не означает рекурсивный. В -R
флаг означает отправку на удаленный.
--parallel=
количество потоков, на которые нужно разбить задание. это возможно ограничены или затронуты, конечно, MaxStartups в /etc/ssh/sshd_config
а также ограничения nofile pam и другие ограничения на целевом сервере.
net:max-retries 6
Я хотел бы повторить попытку, на случай, если было обслуживание сети.
net:timeout 4
сдаться, а затем повторить попытку через 4 секунды.
--no-perms
если вы не хотите менять завивку на удаленном конце.
--newer-than
это просто пример того, что можно использовать по мере необходимости.
--loop
можно использовать для повторения синхронизации до тех пор, пока не будут обнаружены изменения.
bye
мы не хотим забывать выйти из системы вместо того, чтобы полагаться на тайм-аут простоя.
Есть доступно много других вариантов в LFTP.
У меня был большой опыт работы с LFTP, используя его зеркальную подсистему и SFTP. Это значительно быстрее, так как может разбивать задания на несколько потоков. Он может даже разбить один файл на несколько потоков.
А главное преимущество безопасности Использование LFTP позволяет передавать файлы в средах, где вы не хотите, чтобы сценарии автоматизации имели доступ к оболочке на удаленном конце.
Я создал рабочую демонстрацию, с которой вы можете протестировать. Сохранение файлов низкое, но вы можете использовать это, чтобы увидеть, насколько легко автоматизировать отправку каталогов / файлов с помощью lftp плюс sftp chroot. Просто установите lftp а затем создайте временные каталоги или файлы, затем:
mkdir -p ~/sftp_test/`date '+%Y%m%d%H%M'`/{1,2,3}/{a,b,c}
lftp -u anon, -e "set net:timeout 4;set net:max-retries 4;mirror -R --parallel=4 --no-perms ~/sftp_test/ /private/;bye" sftp://ohftp.org
Вы можете использовать приближение пакетного файла:
sftp -b batchfile [user@]host
пакетный файл включает последовательность команд, которые должны воспроизводить операцию "scp" с эквивалентными командами ftp:
binary
cd remote_dir
lcd local_dir
put file