Передача файлов между двумя удаленными SSH-серверами
Существует ли простой способ передачи файлов между двумя SSH/SFTP-серверами? Идеальным решением была бы FileZilla, но она позволяет вам только создать соединение между локальным и удаленным, но не между удаленным и удаленным.
Теоретически я мог бы открыть два окна Nautilus и подключиться к некоторым ssh://server1/path/to/folder
а также ssh://server2/path/to/folder
а затем просто потяните файлы с одного на другой стороне. Мой опыт показывает, что это очень нестабильно. Передача файлов с размером, равным, например, 10 МБ, не является проблемой, но передача, т. Е. 10 ГБ, часто приводила к тому, что Nautilus зависал и оставался там нуждающимся ps -e | grep nautilus
-> kill -9 <pid>
, Я также проверил то же самое с Немо и Кахой. Хотя Nemo имеет тенденцию быть более стабильным, чем два других, он все еще не совершенен и также время от времени ломается. FileZilla чрезвычайно стабильна, никогда не ломалась, но она не очень гибкая из-за упомянутого факта, что она может подключаться только к одному SSH-серверу.
Конечно, я мог также смонтировать папку с sshfs
, но это своего рода неудобное решение. Слишком много предварительной работы, чтобы запустить простую передачу.
Есть ли какое-либо приложение, которое может обрабатывать переводы между двумя SSH-серверами без перерыва? Perfect - это что-то вроде FileZilla, которая снова подхватывает работу, если соединение прервано.
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
затем под капотом делает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.Локальный хост является третьей стороной в этом сценарии, следовательно,-3
, Чтобы это работало, вам понадобятся учетные данные сlocalhost на remote1 и remote2, потому что localhost подключается к ним обоим.scp remote1:file1 remote2:file2
копирует файл непосредственно сremote1 на remote2 со скоростью, с которой они связаны друг с другом. localhost здесь не задействован (кроме выдачи команды). Данные перемещаются удаленно1 → удаленно2. Чтобы это работало, вам понадобятся учетные данные отlocalhost только на remote1,но дополнительно вам понадобятся учетные данныеremote1 на remote2, потому что localhost подключается только к remote1, а затем remote1 подключается к remote2.
Если возможно, я бы выбрал второй подход. Как ужеотмечалось в некоторых комментариях: обычно сетевой кабель между remote1 и remote2 гораздо толще, чем кабель между ними и localhost.
В большинстве случаев два сервера ssh могут связаться друг с другом (или, по крайней мере, один может связаться с другим), и опять же в большинстве случаев интернет рабочей станции гораздо хуже, чем любой из серверов.
Если это так, заказ одного сервера для переноса на другой - это путь.
ssh server1 nohup scp somefile server2:somefile
Проверьте nohup.out
на сервере1 для ошибок.
Если доступность сервера противоположна, вы можете изменить, какая машина является главной:
ssh server2 nohup scp server1:somefile somefile
Возможно, вы можете использовать один из нескольких интерфейсов GUI для rsync:
Есть ли приложение с графическим интерфейсом для команды rsync?
Или, возможно, вы можете использовать rsync непосредственно из командной строки для подключения к обоим удаленным серверам:
"Как rsync файлы между двумя пультами"
Я часто подключаюсь к одному серверу с помощью ssh, а затем из командной строки этого сервера использую rsync для отправки или извлечения файлов на другой удаленный сервер - как правило, это происходит гораздо быстрее, чем пытаться передать файлы через какой-то третий компьютер.
Rsync достаточно умен, чтобы выполнить какую-то работу, а затем, если что-то пойдет не так и прервет процесс, он может позже возобновить работу с того места, где остановился.
Вам нужно использовать протокол SCP. scp file you want to transfer login@address_of_second_server:/path_where_you_want_to_save