Я хочу скопировать файл со своего компьютера A на сервер C, но у меня есть доступ только к серверу C через сервер B.
Вместо того, чтобы сначала передавать на сервер B, войти в систему, а затем передать на сервер C, возможна ли передача файла напрямую с помощью SCP или аналогичных программ?
(Emacs tramp-mode имеет эту функцию для удаленного редактирования файлов).
Предполагая OpenSSH, добавьте к вашей конфигурации SSH в .ssh / config
Это приведет к тому, что SSH сможет подключаться «напрямую» к машине с именем distant через прокси через машину с именем near. Затем он может использовать такие приложения, как scp и sftp для удаленной машины.
Чтобы это работало, вам нужно установить на компьютере с именем «nc» «nc», или «netcat». Но многие современные системы уже будут иметь это.
Решение tar для taro более эффективно для однократных задач, если вы запомнили синтаксис и правила работы tar.
источник
near
отличается от имени пользователя вклdistant
, ближайший пользователь переходит вProxyCommand ssh nearuser@near...
, а удаленный пользователь переходит в отдельнуюUser distantuser
строку.С более свежими версиями ssh на сервере рядом с (B) машиной без netcat будет работать следующее:
Однако для этого потребуется, чтобы значение AllowTcpForwarding было равно yes (по умолчанию) на ближнем (B) компьютере.
редактировать: требуется OpenSSH 5.4+ на B
источник
Вы можете SSH к серверу B, используя что-то вроде
Затем вы можете SSH к серверу C с помощью
Точно так же scp будет работать с использованием
Не забудьте использовать правильный регистр p с scp и ssh
источник
Это возможно и относительно просто, даже если вам нужно использовать сертификаты для аутентификации (типично для сред AWS).
Команда ниже будет копировать файлы из
remotePath
наserver2
непосредственно в вашу машину вlocalPath
. Внутренне запрос scp передается черезserver1
.Другой способ также работает (загрузить файл):
Если вместо этого вы используете аутентификацию по паролю, попробуйте
Если вы используете одинаковые учетные данные пользователя на обоих серверах:
источник
Если вы хотите быть по-настоящему злым, вы можете связать ssh и tar, что-то вроде этого
tar c mydir | ssh server "ssh otherserver | tar x"
, но это может столкнуться со всеми проблемами.Более простым способом было бы просто установить SSH-туннель с помощью встроенных методов SSH; посмотрите на
-D
переключатель в man-странице и просто перенаправьте какой-нибудь порт на ssh-порт другого сервера.источник
Вы также можете сделать это в обратном порядке, и это может быть проще.
Предположим, у вас открыт сеанс ssh с машиной, на которую вы хотите отправить файл. Этот ПК с самым дальним прыжком, мы назовем это hop2. Ваш "прокси" хост будет hop1. ПК, который является источником файла, мы назовем этот источник.
Вы можете строить туннели, делая локальный порт доступным на удаленном ПК. Таким образом, мы определяем порт, который будет открыт на удаленном ПК, который будет перенаправлять на порт, который вы перенаправили с собой, когда строили туннель.
На хопе 2:
Теперь в этом открытом сеансе туннеля вы можете сделать то же самое с hop1 до file_origin.
На прыжке 1:
Вы теперь туннелированы с hop2 на hop1 к источнику. По совпадению, теперь оба порта 5555 и 6666 открыты на источнике, которые перенаправляют на порт 22 hop2. В этом сеансе оба из следующих допустимых маршрутов scp к hop2:
По происхождению:
Таким образом, вы можете иметь произвольное количество переходов между ними, и с ним проще работать с точки зрения объединения более двух переходов.
источник
Попробуйте адаптировать следующий пример конфигурации openssh для настройки, которую можно использовать для нескольких хостов:
Это предполагает набор серверов, начинающихся с «uat-», которые доступны только через сервер Jumpbox / Gateway «bastion-uat». Вы, вероятно, также хотите добавить,
ForwardAgent yes
если вы используете ключ для входа в систему.источник
ForwardAgent yes
для этого. В этом случае переадресация агента не требуется, поскольку на бастионе не будет запущен ssh-клиент, а переадресация агента, когда он не нужен, просто снизит безопасность. И я думаю, чтоssh
отсутствует в вашей команде. Если используется последняяssh
версия, которая вам не нужнаnc
, вы можете ввестиssh -W %h:%p bastion-uat
вместо нее.Это не scp (который запрашивал OP), но я обнаружил, что его очень просто использовать
rsync
для копирования с локального на удаленное через один прыжок с помощью:Источник: http://mjbright.blogspot.com/2012/09/using-rsync-over-multi-hop-ssh.html
Я попробовал предложенное выше -o ProxyPass и не хотел менять конфигурацию для меняющихся потребностей. Как указывает автор в приведенной выше ссылке, целевой файл, предшествующий двоеточию (:), важен для указания того, что указанный путь находится на целевом сервере. Кроме того, используя rsync, у вас есть опции сравнения дат, синхронизации папок и т. Д. Надеюсь, это кому-нибудь поможет!
источник
scp -o 'ProxyJump jumpboxname' somefilename.txt finaldestinationhost: / tmp /.
источник