Как scp со вторым удаленным хостом



интересно, есть ли способ для меня, чтобы SCP файл с узла remote2 непосредственно с моей локальной машины, проходя через узел remote1.

сети позволяют подключаться только к хосту remote2 с хоста remote1. Кроме того, ни узел remote1, ни узел remote2 не могут scp для моей локальной машины.

есть что-то вроде:

scp user1@remote1:user2@remote2:file .

первое окно: ssh remote1, потом scp remot2:file ..

второй снаряд: scp remote1:file .

первое окно: rm file; logout

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

спасибо.

EDIT: я думаю что-то вроде открытия SSH-туннелей, но я смущен тем, какое значение поставить где.

на данный момент получить доступ к remote1, у меня есть следующие в $HOME/.ssh/config на моей локальной машине.

Host remote1
   User     user1
   Hostname localhost
   Port     45678

один раз на remote1, чтобы открыть remote2, это стандартный локальный DNS и порт 22. Что я должен надеть remote1 и/или изменить на localhost?

199   4  
scp

4 ответов:

Я не знаю, как скопировать файл непосредственно в одной команде, но если вы можете уступить запуску экземпляра SSH в фоновом режиме, чтобы просто открыть туннель переадресации портов, вы можете скопировать файл в одной команде.

такой:

# First, open the tunnel
ssh -L 1234:remote2:22 -p 45678 user1@remote1
# Then, use the tunnel to copy the file directly from remote2
scp -P 1234 user2@localhost:file .

обратите внимание, что вы подключились как user2@localhost в фактических scp команда, потому что это на порту 1234 на localhost, что первый ssh экземпляр прослушивает прямые соединения с remote2. Отметим также, что вам не нужно запускать первую команду для каждой последующей копии файла; вы можете просто оставить ее запущенной.

двойной ssh

даже в вашем сложном случае, вы можете обрабатывать передачу файлов с помощью одной командной строки, просто с ssh ; -)
И это полезно, если remote1 не удается подключиться к localhost:

ssh user1@remote1 'ssh user2@remote2 "cat file"' > file

tar

но вы теряете свойства файла (владение, разрешения...).

, tar ваш друг, чтобы сохранить эти параметры файла:
ssh user1@remote1 'ssh user2@remote2 "cd path2; tar c file"' | tar x

вы также можете сжать, чтобы уменьшить сеть пропускная способность:

ssh user1@remote1 'ssh user2@remote2 "cd path2; tar cj file"' | tar xj

и tar также позволяет передавать рекурсивный каталог через basic ssh:

ssh user1@remote1 'ssh user2@remote2 "cd path2; tar cj ."' | tar xj

ionice

если файл огромен и вы не хотите беспокоить другие важные сетевые приложения, вы можете пропустить ограничение пропускной способности сети предоставлен scp и rsync инструменты (например,scp -l 1024 user@remote:file не использует более 1 Мбит / сек).

но, обходной путь использует ionice чтобы сохранить одну командную строку:

ionice -c2 -n7 ssh u1@remote1 'ionice -c2 -n7 ssh u2@remote2 "cat file"' > file

Примечание: ionice может быть недоступно в старых дистрибутивах.

это будет делать трюк:

scp -o 'Host remote2' -o 'ProxyCommand ssh user@remote1 nc %h %p' user@remote2:path/to/file .

чтобы SCP файл с хоста remote2 непосредственно, добавьте два варианта (Host и ProxyCommand) в ваш ~/.ssh / config файл (см. также этой ответ на суперпользователя). Затем вы можете запустить:

scp user@remote2:path/to/file .

С вашего локального компьютера без необходимости думать о remote1.

С openssh версии 7.3 и легко. Используйте ProxyJump опция в конфигурационном файле.

# Add to ~/.ssh/config 
Host bastion
    Hostname bastion.client.com
    User userForBastion
    IdentityFile ~/.ssh/bastion.pem

Host appMachine
    Hostname appMachine.internal.com
    User bastion
    ProxyJump bastion                   # openssh 7.3 version new feature ProxyJump
    IdentityFile ~/.ssh/appMachine.pem. #no need to copy pem file to bastion host  

команды для запуска входа в систему или копирования

ssh appMachine   # no need to specify any tunnel. 
scp helloWorld.txt appMachine:.   # copy without intermediate jumphost/bastion host copy.** 

конечно, вы можете указать Bastion Jump host с помощью опции "-J" для команды ssh, если она не настроена в файле конфигурации.

Примечание scp тут не кажется, поддерживает флаг "- J " на данный момент. (я не мог найти в справочных страницах. Однако выше scp работает с настройка файла конфигурации)

    Ничего не найдено.

Добавить ответ:
Отменить.