89

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

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

我在家里尝试过完全相同的东西,而且效果很好。我在 OSX 上使用终端连接。

谁能告诉我如何使用 SSH 通过代理?

4

13 回答 13

96

以下是如何将 Richard Christensen 的答案作为单行字进行,无需文件编辑(用您自己的设置替换大写,PROXYPORT 通常为 80):

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

您也可以对scp使用相同的-o ...选项,请参阅我的超级用户回答


如果你在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 --Xconnect-proxy是一种替代方案,易于安装使用yum和工作 -

ssh -o ProxyCommand="connect-proxy -S PROXYHOST:PROXYPORT %h %p" USER@FINAL_DEST
于 2014-05-12T18:16:52.150 回答
36

如果要经常使用 SSH 代理连接,则不必每次都将它们作为参数传递。您可以将以下行添加到~/.ssh/config

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

然后连接使用

ssh foobar.example.com

来源在这里

于 2013-10-03T14:39:54.667 回答
27

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

于 2016-01-14T04:48:28.993 回答
16

只是对@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可以完美地工作。

于 2016-12-07T15:15:03.077 回答
7

对于 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 浏览器,运行并等待连接。
    2. 我从Nmap 发行版中获得了Ncat并提取到当前目录中。ncat.exe
    3. 在带有附加参数的Git Bash中使用 Ncat 作为 ProxyCommand 的 SSH :--proxy-type socks4

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

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

  • 更好的解决方案

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

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

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

要在使用 ssh 的命令中使用代理git(例如在使用 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
于 2019-04-30T09:09:25.953 回答
3
ProxyCommand nc -proxy xxx.com:8080 %h %p

删除-X connect-proxy 改用。

为我工作。

于 2018-12-10T19:43:53.270 回答
3
$ 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
于 2017-10-09T13:54:01.423 回答
2

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

我的系统是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有and之类的不同版本openbsd-netcatGNU-netcatdebian中的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

于 2021-01-04T09:37:48.990 回答
2

我用proxychains ssh user@host; 来自proxychains-ng
默认情况下,它使用socks4代理,127.0.0.1:9050但可以在 conf 文件中更改它,/etc/proxychains.conf或者您可以指定另一个 conf 文件,如下所示:proxychains -f custom.conf

于 2019-06-20T08:52:33.040 回答
1

.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)。乍一看,检查各自的手册页,openbsd-netcat和 Ubuntunetcat似乎非常相似,特别是关于选项-X-x. 有了这个,我连接没有问题。

于 2018-09-27T14:37:34.050 回答
0

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

于 2020-09-08T10:25:38.313 回答
0

在我的情况下,因为我在途中有一个跳转主机或堡垒主机,并且因为这些堡垒节点上的签名在它们被导入 known_hosts 文件后发生了变化,所以我只需要从以下文件中删除这些条目/行:

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

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

于 2018-02-13T13:40:24.753 回答
0

如果有人在 CentOS / RHEL 上得到

nc: invalid option -- 'X'

使用这个 ProxyCommand

ProxyCommand nc --proxy  HOST:PORT --proxy-type http %h %p
于 2021-04-08T12:05:34.423 回答