Интересно, есть ли у меня способ 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
Я мог бы написать сценарий для выполнения всех этих шагов, но если есть прямой способ, я бы предпочел его использовать.
Благодарю.
РЕДАКТИРОВАТЬ: Я думаю о чем-то вроде открытия туннелей SSH, но я не понимаю, какое значение куда поместить.
На данный момент для доступа у remote1
меня $HOME/.ssh/config
на локальной машине есть следующее .
Host remote1
User user1
Hostname localhost
Port 45678
После включения remote1
для доступа remote2
используется стандартный локальный DNS и порт 22. Что мне надеть remote1
и / или изменить localhost
?
-p 45678
на-p 22
SSH remote1, который прослушивает порт 22-p 22
вместо-p 45678
. Уscp -P 1234 ...
меня тоже не работает. Я получаюssh: connect to host localhost port 1234: Connection refused
. Когда я попробовал,scp -P 22 ...
он работает, но он копирует файл,remote 1
а не на мою локальную машину (remote2
).Двойной
ssh
Даже в вашем сложном случае вы можете обрабатывать передачу файлов с помощью одной командной строки, просто с помощью
ssh
;-)И это полезно, если
remote1
не удается подключиться кlocalhost
:tar
Но вы теряете свойства файла (право собственности, разрешения ...).
Тем не менее,
tar
ваш друг, чтобы сохранить эти свойства файла:Вы также можете сжать, чтобы уменьшить пропускную способность сети:
А
tar
также позволяет передавать рекурсивный каталог через базовыйssh
:ionice
Если файл огромен , и вы не хотите беспокоить другие важные сетевые приложения, вы можете пропустить сеть пропускного ограничения предоставляемого
scp
иrsync
инструменты (например ,scp -l 1024 user@remote:file
не использует более 1 Мбит / секунду).Но
ionice
для сохранения единой командной строки используется обходной путь :Примечание:
ionice
может быть недоступно в старых дистрибутивах.источник
Это поможет:
Чтобы SCP файл
remote2
напрямую с хоста , добавьте две опции (Host
иProxyCommand
) в ваш файл ~ / .ssh / config (см. Также этот ответ о суперпользователе). Тогда вы можете запустить:с вашего локального компьютера, не думая об этом
remote1
.источник
-o 'Host remote2'
, похоже, это не требуется при запуске из командной строки (т.е. для однократного копирования, не касаясь ~ / .ssh / config)-o 'Host remote2'
. Благодарю.С openssh версии 7.3 и выше это легко. Используйте параметр ProxyJump в файле конфигурации.
Команды для запуска для входа в систему или копирования
Конечно, вы можете указать хост бастиона Jump, используя опцию "-J" для команды ssh, если это не указано в файле конфигурации.
Обратите внимание, что на данный момент scp , похоже, не поддерживает флаг «-J». (я не смог найти на страницах руководства. Однако вышеупомянутый scp работает с настройкой файла конфигурации)
источник
В том,
scp
что недавно добавили, есть новая опция для точно такой же работы, что очень удобно, это так-3
.TL; DR Для текущего хоста, для которого аутентификация уже настроена в файлах конфигурации ssh, просто выполните:
Вы
scp
должны быть из последних версий.Все остальные упомянутые методы требуют, чтобы вы настроили аутентификацию с удаленного1 на удаленный2 или наоборот, что не всегда является хорошей идеей.
Аргумент
-3
означает, что вы хотите переместить файлы с двух удаленных хостов, используя текущий хост в качестве посредника, и этот хост фактически выполняет аутентификацию для обоих удаленных хостов, поэтому им не нужно иметь доступ друг к другу.Вам просто нужно настроить аутентификацию в файлах конфигурации ssh, что довольно просто и хорошо документировано, а затем просто запустить команду на TL; DR
Источник этого ответа: https://superuser.com/a/686527/713762
источник
Эта конфигурация мне нравится:
Тогда команда
Копии Myfile для производства машины.
источник
Небольшое дополнение к решению Olibre , с которым я работал, используя этот источник.
Так же, как у вас есть три способа
tar
копирования с удаленного хоста на локальный, для копирования с локального хоста на удаленный хост в ситуациях двойного ssh работает следующее: (запустите их в каталоге, из которого должны быть скопированы файлы, в противном случае используйте полный путь /имя файла)Передача одного файла без сжатия:
Передача одного файла со сжатием:
Рекурсивный перенос каталога:
Здесь && предотвращает запуск команды, если первая половина команды не работает - например, если каталог отсутствует или есть ошибка в именах пути источника / назначения.
источник