Подключение к SSH через прокси-сервер

Я понятия не имею, что я здесь делаю, поэтому имейте это в виду, если вы можете мне помочь!

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

Я попробовал точно то же самое дома, и это работает отлично. Я использую терминал для OSX.

Может кто-нибудь посоветовать мне, как я могу пройти через прокси с SSH?

Ответы

Ответ 1

Вот как ответить Ричарду Кристенсену как на одну строку, редактирование файла не требуется (заменяйте заглавными буквами вашими собственными настройками, PROXYPORT часто 80):

 ssh [email protected]_DEST -o "ProxyCommand=nc -X connect -x PROXYHOST:PROXYPORT %h %p"

Вы также можете использовать ту же -o... для scp, см. Https://superuser.com/a/752621/39364

Если вы получите это в OS X:

 nc: invalid option -- X
 Try 'nc --help' for more information.

может случиться так, что вы случайно используете доморощенную версию netcat (вы можете увидеть, выполнив a, which -a nc command-- /usr/bin/nc должен быть указан первым). Если их два, то один обходной путь - указать полный путь к nc, который вы хотите, например, ProxyCommand=/usr/bin/nc...

Для CentOS nc та же проблема с invalid option --X. connect-proxy - это альтернатива, простая в установке с использованием yum и работающая -

ssh -o ProxyCommand="connect-proxy -S PROXYHOST:PROXYPORT %h %p" [email protected]_DEST

Ответ 2

Если ваше прокси-соединение SSH будет использоваться часто, вам не нужно передавать их в качестве параметров каждый раз. вы можете добавить следующие строки в ~/.ssh/config

Host foobar.example.com
    ProxyCommand          nc -X connect -x proxyhost:proxyport %h %p
    ServerAliveInterval   10

затем для подключения используйте

ssh foobar.example.com

Источник:

http://www.perkin.org.uk/posts/ssh-via-http-proxy-in-osx.html

Ответ 3

Я использую параметр -o "ProxyCommand=nc -X 5 -x proxyhost:proxyport %h %p" ssh для подключения через прокси-сервер socks5 на OSX.

Ответ 4

@rogerdpack для платформы Windows очень сложно найти nc.exe с -X (http_proxy), однако я нашел, что nc можно заменить на ncat, полный пример следующим образом:

Host github.com
     HostName github.com
         #ProxyCommand nc -X connect -x 127.0.0.1:1080 %h %p
         ProxyCommand ncat --proxy 127.0.0.1:1080 %h %p
     User git
     Port 22
     IdentityFile D:\Users\Administrator\.ssh\github_key

и ncat с --proxy могут отлично работать

Ответ 5

Для окон параметры @shoaly у меня не работали полностью. Я получаю эту ошибку:

NCAT DEBUG: Proxy returned status code 501.
Ncat: Proxy returned status code 501.
ssh_exchange_identification: Connection closed by remote host

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

  • Для решения проблемы с помощью Ncat:

    1. Я скачал Tor Browser, запустил и дождался подключения.
    2. Я получил Ncat из дистрибутива Nmap и извлек ncat.exe в текущий каталог.
    3. SSH, использующий Ncat в качестве ProxyCommand в Git Bash с добавлением параметра --proxy-type socks4:

      ssh -o "ProxyCommand=./ncat --proxy-type socks4 --proxy 127.0.0.1:9150 %h %p" [email protected]
      

      Обратите внимание, что эта реализация Ncat не поддерживает socks5.

  • ЛУЧШЕЕ РЕШЕНИЕ:

    1. Выполните предыдущий шаг 1.
    2. SSH с использованием connect.c в качестве ProxyCommand в Git Bash:

      ssh -o "ProxyCommand=connect -a none -S 127.0.0.1:9150 %h %p"
      

      Обратите внимание, что connect.c поддерживает носки версии 4/4a/5.

Чтобы использовать прокси в командах git с использованием ssh (например, при использовании GitHub) - при условии, что вы установили Git Bash в C:\Program Files\Git\ - откройте ~/.ssh/config и добавьте эту запись:

host github.com
    user git
    hostname github.com
    port 22
    proxycommand "/c/Program Files/Git/mingw64/bin/connect.exe" -a none -S 127.0.0.1:9150 %h %p

Ответ 6

$ which nc
/bin/nc

$ rpm -qf /bin/nc
nmap-ncat-7.40-7.fc26.x86_64

$ ssh -o "ProxyCommand nc --proxy <addr[:port]> %h %p" [email protected]

$ ssh -o "ProxyCommand nc --proxy <addr[:port]> --proxy-type <type> --proxy-auth <auth> %h %p" [email protected]

Ответ 7

ProxyCommand nc -proxy xxx.com:8080 %h %p

удалите -X connect и используйте вместо него -proxy.

Работал на меня.

Ответ 8

Я использую proxychains ssh [email protected]; из proxychains-ng (см. https://github.com/rofl0r/proxychains-ng).
По умолчанию он использует прокси socks4 в 127.0.0.1:9050, но его можно изменить в файле /etc/proxychains.conf или указать другой файл proxychains -f custom.conf файле proxychains -f custom.conf

Ответ 9

В моем случае, так как у меня в пути был хост перехода или хост Bastion, и поскольку подписи на этих узлах Bastion изменились с момента их импорта в файл known_hosts, мне просто нужно было удалить эти записи/строки из следующего файла:

/Users/a.abdi-kelishami/.ssh/known_hosts

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

Ответ 10

Я использовал следующие строки в моем .ssh/config (который можно заменить подходящими параметрами командной строки) под Ubuntu

Host remhost
  HostName      my.host.com
  User          myuser
  ProxyCommand  nc -v -X 5 -x proxy-ip:1080 %h %p 2> ssh-err.log
  ServerAliveInterval 30
  ForwardX11 yes

При использовании его с Msys2 после установки gnu-netcat файл ssh-err.log показал, что опция -X не существует. nc --help подтвердил это и, похоже, показал, что альтернативного варианта обработки прокси не существует.

Поэтому я установил openbsd-netcat (после запроса pacman удалил gnu-netcat, поскольку он конфликтовал с openbsd-netcat). На первый взгляд и при проверке соответствующих man-страниц openbsd-netcat и Ubuntu netcat кажутся очень похожими, в частности, в отношении опций -X и -X. С этим я связался без проблем.