Назад | Перейти на главную страницу

Заменить scp на sftp

У нас есть несколько сценариев синхронизации для клиента, отправляющего файлы с помощью 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