В Вашем/etc/ssh/ssh.conf или если у Вас есть свой собственный ssh.conf в Вашей домашней папке (~/.ssh/...) пытаются изменить версию протокола с 2 до 1 или независимо от того, что протокол работает на Вашей машине окон. Для получения дополнительной информации посмотрите человека ssh и человека ssh.conf
Подобный тому, чем jw013, предложенный в комментариях с отдельными шагами сжатия/распаковки, т.е. объединении два ssh, управляет с каналом:
compress=gzip
decompress=gunzip
ssh remote1 "cd srcdir; tar cf - dir | $compress" |
ssh remote2 "cd destdir; $decompress | tar xvf -"
Обратите внимание, что сжатие/распаковка настраивается без в зависимости от версии tar
.
Вы могли также добавить проверку контрольной суммы в канал:
compress=gzip
decompress=gunzip
ckprg=md5sum
cksum=/tmp/cksum
ssh remote1 "cd srcdir; tar cf - dir | $compress | tee <($ckprg > $cksum)" |
ssh remote2 "cd destdir; tee <($ckprg > $cksum) | $decompress | tar xvf -"
ssh remote1 cat $cksum
ssh remote2 cat $cksum
Ваша передача была бы быстрее, если Вы могли бы установить прямое подключение между двумя хостами. Но испытывая недостаток в этом, самый простой путь состоит в том, чтобы использовать cp
. Сначала смонтируйте удаленные файловые системы с помощью sshfs
mkdir ~/net ~/net/sourcehost ~/net/destinationhost
sshfs sourcehost: ~/net/sourcehost
sshfs destinationhost: ~/net/destinationhost
cp -Rp ~/net/sourcehost/path/to/source ~/net/destinationhost/path/to/destination
Обязательно активируйте сжатие в Вашем ~/.ssh/config
:
Host sourcehost
HostName sourcehost.example.com
Compression yes
CompressionLevel 9
Host destinationhost
HostName destinationhost.example.com
Compression yes
CompressionLevel 9
Compression yes
гарантирует, что это использует сжатие. SSHFS требует одной строки постоянной установки (mkdir
), одна строка установки на сессию на хост (монтируются), и фактическое копирование тривиально (cp
) и даже не требует, чтобы Вы помнили, что файлы, которые Вы копируете, являются удаленными.
– Gilles 'SO- stop being evil'
17.08.2012, 12:25
Ваш предложенный ответ:
ssh -n REMOTEHOST 'tar zcvf - DIRTOCOPY' | localZip.tar.gz
не работал на меня - канал в отказавший файл.
Я сделал это вместо этого, и это работало:
ssh -n REMOTEHOST 'tar zcvf - DIRTOCOPY' | cat - > localZip.tar.gz
Передайте его по каналу 'кошке' через стандартный вход и перенаправьте вывод в файл.
другое решение состояло бы в том, чтобы удалить "| кошка -" и просто отправить вывод SSH непосредственно в tarball:
ssh -n REMOTEHOST 'tar zcvf - DIRTOCOPY' > localZip.tar.gz