Я знаю, что это поздний ответ, но я только что нашел крутой способ сделать это. Это в основном ответ Хольгера Джаста, но в сохраненном конфигурационном файле:
Вы должны поместить это в свой ~/.ssh/config
файл на local.machine (создавая файл, если он не существует)
Host target.machine
User targetuser
HostName target.machine
ProxyCommand ssh proxyuser@proxy.machine nc %h %p 2> /dev/null
После сохранения файла вы можете просто использовать
ssh target.machine
в любое время вы хотите подключиться. Scp также будет работать, поскольку он также учитывает конфигурационный файл ssh. Так же будет и Наутилус, если вы используете GNOME и хотите использовать графический интерфейс.
Host proxy.machine
строки в том же~/.ssh/config
файле, 2) Укажите, могут ли эти команды быть вложенными (т. Е. Клиент подключается к прокси-узлу 1, который подключается к прокси-узлу 2, который подключается к. ..target) и 3) чтоnc %h %p
значитВы можете сделать это одной командой, но на прокси-машине должен быть установлен netcat (nc):
[РЕДАКТИРОВАТЬ: перепутал порядок машин ...]
источник
Теперь вы можете * сделать это как однострочник, нигде не требуя
nc
:объяснение
pcreds
иtcreds
представьте свой прокси и целевые учетные данные, если требуется (username
,username:password
и т. д.).Это возможно из-за встроенной способности, подобной netcat, что устраняет необходимость
nc
в промежуточном хосте. Использованиеssh -W host:port
устанавливает туннель для указанного хоста и порта и подключает его к stdin / stdout, а затемscp
запускает через туннель.Символы
%h
и%p
вProxyCommand
заменяются целевым хостом и указанным вами портом.Для еще большего удобства вы можете настроить прокси в вашей конфигурации ssh:
и с тех пор просто сделать
* начиная с версии OpenSSH 5.4, выпущенной в марте 2010 г.
источник
-p <portnum>
перед-W
либо способом указать порт проксиЕсли вы не возражаете против использования rsync вместо scp, вы можете использовать следующую однострочную строку:
(вам понадобится доступ без пароля к прокси-машине)
источник
ОК, на самом деле две команды ...
источник
8080
-p <portnumber>
в вашу команду sshОднострочник? Не с моей головы. Сначала вам нужно установить прокси, и вы не можете сделать это с помощью scp.
Делая это вручную, я открываю сеанс экрана для своего туннеля:
screen -S tunnel
Экран используется для поддержания туннеля в фоновом режиме. Используйте любую технику, которую вы хотите, чтобы туннель был открыт в фоновом режиме (ответ @ weeheavy, вероятно, самый простой). Однажды в сеансе экрана я начинаю свой туннель так
ssh -L 2222:target.machine:22 [user@]proxy.machine
Чтобы разобраться с этим, в основном говорится: «На моем локальном компьютере откройте порт 2222, и любое соединение, подключенное к localhost: 2222, передается через proxy.machine на target.machine: 22».
После того, как вы установили соединение ssh и туннель, отсоединитесь от сеанса экрана с помощью «Ca d». Чтобы вернуться к этому сеансу экрана, введите
screen -raAd tunnel
Как только вы вернетесь в исходную оболочку, ваша команда scp будет выглядеть так:
scp -P 2222 localhost:your/file/on/target.machine local/path
Помните, что локальный порт 2222 - это просто туннель, идущий к target.machine.
источник
Похоже, что scp поддерживает опцию "-o" так же, как и ssh, хотя я не уверен, как передать ему имя пользователя / пароль прокси:
Если вы получили,
nc: invalid option -- X
смотрите https://stackoverflow.com/a/23616021/32453источник
Как насчет:
источник
Вы можете попробовать что-то вроде:
Но это не сработает, если ваш proxy.machine будет запрашивать у вас пароль (этот SSH отсутствует в TTY, поэтому askpass завершится неудачно).
Если у вас более одного файла, вы можете использовать tar следующим образом (непроверенный, обычно я использую netcat):
источник
Другое простое решение для передачи исходного_файла из исходного_хоста в конечный_хост через proxy_host :
Войдите на proxy_server :
С прокси-сервера перенесите исходный_файл из source_host в destination_host (вы можете ввести его одной строкой, пропуская
\
или двумя строками, как показано ниже):Для этого необходимо, чтобы при входе на source_host на proxy_host использовался ключ rsa_key.
источник
В случае, если вам нужно использовать открытые ключи, вам нужно что-то вроде этого.
источник
Я следил за этой статьей и нашел ответ, который работает для меня. (Потому что ответы выше не работают для меня).
Как
scp
получить файл через промежуточный хост (иначе хост перехода) http://mperdikeas.github.io/networking.html.files/scp-a-file-through-jump-host.htmlИ мой ответ как ниже:
Пример:
Я надеюсь, что этот ответ может помочь вам.
источник