通过代理连接SSH

时间:2013-10-03 14:32:26

标签: ssh proxy terminal

我不知道我在这里做什么,所以如果你能帮助我,请记住这一点!

我正在尝试通过代理连接到我的虚拟服务器,但我无法连接,它只是挂起。我假设这是因为它没有通过我们的代理。

我在家里尝试了完全相同的东西,它完美无缺。我在OSX上运行使用终端连接。

有人可以告诉我如何通过SSH获取代理吗?

13 个答案:

答案 0 :(得分:51)

以下是理查德·克里斯滕森的答案如何做单行,不需要文件编辑(用你自己的设置替换大写,PROXYPORT经常是80):

 ssh USER@FINAL_DEST -o "ProxyCommand=nc -X connect -x PROXYHOST:PROXYPORT %h %p"

您也可以为scp使用相同的-o ...选项,请参阅https://superuser.com/a/752621/39364

如果你在OS X中得到这个:

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

可能是您不小心使用了自制的netcat版本(您可以通过执行which -a nc命令看到 - /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" USER@FINAL_DEST

答案 1 :(得分:22)

如果要经常使用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

答案 2 :(得分:17)

我使用-o "ProxyCommand=nc -X 5 -x proxyhost:proxyport %h %p" ssh选项通过OSX上的socks5代理连接。

答案 3 :(得分:8)

@rogerdpack 对于Windows平台,很难找到带-X(http_proxy)的nc.exe,但是,我发现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可以做一个完美的工作

答案 4 :(得分:2)

$ 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" USER@HOST

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

答案 5 :(得分:1)

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

删除-X connect并改用-proxy

为我工作。

答案 6 :(得分:1)

我使用proxychains ssh user@host;来自proxychains-ng(请参阅https://github.com/rofl0r/proxychains-ng)。
默认情况下,它在127.0.0.1:9050使用socks4代理,但是可以在conf文件/etc/proxychains.conf中进行更改,也可以指定另一个conf文件proxychains -f custom.conf

答案 7 :(得分:1)

我就是这样解决的,希望以后能帮到其他人。

我的系统是 debian 10,安装最少。

我也有同样的问题。

git clone git@github.com:nothing/nothing.git
Cloning into 'nothing'...
nc: invalid option -- 'x'
nc -h for help
ssh_exchange_identification: Connection closed by remote host
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

git clone git@github.com:nothing/nothing.git
Cloning into 'nothing'...
/usr/bin/nc: invalid option -- 'X'
nc -h for help
ssh_exchange_identification: Connection closed by remote host
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

所以,我知道nc有不同的版本,比如openbsd-netcatGNU-netcat,你可以把debian中的nc改成openbsd版本,但是我选择把软件改成corkscrew ,因为系统中两个版本的nc名称是一样的,很多人不太理解。我的做法如下。

sudo apt install corkscrew

那么。

vim ~/.ssh/config

像这样更改这个文件。

Host github.com
    User git
    ProxyCommand corkscrew 192.168.1.22 8118 %h %p

192.168.1.228118是我代理服务器的地址和端口,根据你的服务器地址修改。

一切正常。

谢谢@han

答案 8 :(得分:0)

在我的情况下,因为我有一个跳转主机或Bastion主机,并且因为这些堡垒节点上的签名已经更改,因为它们被导入到known_hosts文件中,我只需要从以下文件中删除这些条目/行:

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

从上面的文件中删除那些引用堡垒主机的行。

答案 9 :(得分:0)

我在Ubuntu下的.ssh/config中使用了以下几行(可以用​​适当的命令行参数替换)

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(由于询问pacmangnu-netcat冲突,openbsd-netcat被删除了openbsd-netcat)。在第一个视图上,并检查相应的手册页,netcat和Ubuntu -X看起来非常相似,特别是在选项-x和{{1}}方面。 这样,我就没问题了。

答案 10 :(得分:0)

对于Windows,@ shoaly参数对我而言并不完全有效。我收到此错误:

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

我想SSH到REMOTESERVER,并且我的网络中的SSH端口已关闭。我找到了两种解决方案,但第二种更好。

  • 使用Ncat解决问题:

    1. 我下载了Tor Browser,运行并等待连接。
    2. 我从Ncat获得了Nmap distribution并将ncat.exe提取到当前目录中。
    3. SSH,在Git Bash中使用Ncat作为ProxyCommand,并添加了--proxy-type socks4参数:

      ssh -o "ProxyCommand=./ncat --proxy-type socks4 --proxy 127.0.0.1:9150 %h %p" USERNAME@REMOTESERVER
      

      请注意,此Ncat实现不支持socks5。

  • 更好的解决方案

    1. 执行上一步骤。
    2. 在Git Bash中使用connect.c作为ProxyCommand的SSH:

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

      请注意,connect.c支持袜子版本4 / 4a / 5。

要使用ssh在git命令中使用代理(例如,在使用GitHub时)(假设您在C:\Program Files\Git\中安装了Git Bash,请打开~/.ssh/config并添加以下条目:< / p>

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

答案 11 :(得分:0)

对于有问题的命令,尝试-o "ProxyCommand=nc --proxy HOST:PORT %h %p"。它可以在OEL6上运行,但需要按照OEL7所述进行修改。

答案 12 :(得分:0)

如果有人在 CentOS / RHEL 上得到

nc: invalid option -- 'X'

使用这个 ProxyCommand

ProxyCommand nc --proxy  HOST:PORT --proxy-type http %h %p