Файлы передачи между двумя удаленными серверами SSH

Существует ли простой способ передать файлы между двумя серверами SSH/SFTP? Идеальным решением был бы FileZilla, но это только позволяет Вам создать соединение между локальным и удаленным, но не между удаленным и удаленным.

Теоретически я мог открыть два окна Nautilus и подключение к некоторым ssh://server1/path/to/folder и ssh://server2/path/to/folder и затем просто вытяните файлы от одного до другой стороны. Мой опыт состоит в том, что это очень нестабильно. Передача файлов в сумме размера т.е. 10 МБ не является никакой проблемой, но передача т.е. 10 ГБ часто приводила к Наутилусу, зависающему самому и остающемуся там нуждающейся в ps -e | grep nautilus -> kill -9 <pid>. Я также протестировал то же самое с Немо и Caja. В то время как Немо склонен быть более стабильным, чем оба другие, это все еще не прекрасно и также время от времени повреждается. FileZilla чрезвычайно стабилен, никогда действительно заставил это повреждаться, но это не очень гибко из-за упомянутого того, что это может только соединиться с единственным сервером SSH.

Конечно, я мог также смонтировать папку с sshfs, но это - вид неудобного решения. Слишком много предварительной работы, чтобы сделать для получения простого выполнения передачи.

Есть ли какое-либо приложение, которое может обработать передачи между двумя серверами SSH без повреждения? Прекрасный было бы что-то как FileZilla, который берет задание снова, если соединение было прервано.

21
задан 6 February 2019 в 19:59

4 ответа

Если Вы находитесь на версии Ubuntu, которая все еще поддерживается, то Ваш scp команда обеспечит -3 переключатель, который позволяет копировать файлы от remote1 до remote2 через localhost:

me@local:~> scp -3 user1@remote1:/path/to/file1 user2@remote2:/path/to/file2

Можно также опустить -3 переключатель, но затем Вам будет нужен открытый ключ (id_rsa.pub) из user1@remote1 в файле authorized_keys из user2@remote2:

me@local:~> scp user1@remote1:/path/to/file1 user2@remote2:/path/to/file2

scp затем под капотом делает a ssh user1@remote1 сначала и оттуда scp /path/to/file1 user2@remote2:/path/to/file2. Вот почему учетные данные должны быть распределены отличающиеся от -3 решение.

Другими словами:

  • scp -3 remote1:file1 remote2:file2 передает файл от remote1 до localhost и затем обратно к remote2. remote1 → localhost → remote2 перемещений данных. localhost является третьей стороной в этом сценарии, следовательно -3. Чтобы это работало, Вам будут нужны учетные данные от localhost и на remote1 и на remote2, потому что localhost соединяется с ними обоими.

  • scp remote1:file1 remote2:file2 копирует файл непосредственно от remote1 до remote2 на скорости, с которой они подключены друг к другу. localhost не включен здесь (помимо выдачи команды). remote1 → remote2 перемещений данных. Чтобы это работало, Вам будут нужны учетные данные от localhost только на remote1, но дополнительно Вам нужны учетные данные remote1 на remote2, потому что localhost соединяется с remote1 только и затем remote1 подключения к remote2.

Если возможный я выбрал бы второй подход. Поскольку в некоторых комментариях уже говорится: обычно часто сетевой кабель между remote1 и remote2 является намного более толстым, чем кабель между ними и localhost.

36
ответ дан 23 November 2019 в 01:38

В большинстве случаев два ssh сервера могут достигнуть друг друга (или по крайней мере один может достигнуть другого), и снова в большинстве случаев Интернет рабочей станции намного хуже, чем любой из серверов.

Если так, упорядочивание, чтобы один сервер передал другому, является способом пойти.

ssh server1 nohup scp somefile server2:somefile

Проверить nohup.out на server1 для ошибок.

Если достижимость сервера наоборот, можно инвертировать, какая машина является ведущим устройством:

ssh server2 nohup scp server1:somefile somefile
10
ответ дан 23 November 2019 в 01:38

Возможно, Вы могли использовать один из нескольких фронтендов GUI к rsync:

Есть ли какое-либо приложение GUI для команды rsync?

Или возможно Вы могли использовать rsync непосредственно из командной строки для соединения с обоими удаленными серверами:

"Как в rsync файлы между двумя пультами ДУ"

Я часто вхожу в систему одного сервера с ssh, затем от rsync использования командной строки того сервера, чтобы продвинуть или вытянуть файлы к другому удаленному серверу - это обычно намного более быстро, чем попытка передать файлы с помощью некоторого 3-го компьютера.

rsync достаточно умен, чтобы сделать некоторую работу, затем если что-нибудь идет не так, как надо и прерывает процесс, это может позже возобновить право, где это кончило.

7
ответ дан 23 November 2019 в 01:38

Необходимо использовать протокол SCP. scp file you want to transfer login@address_of_second_server:/path_where_you_want_to_save

0
ответ дан 23 November 2019 в 01:38

Другие вопросы по тегам:

Похожие вопросы: