通过代理连接SSH

问题描述 投票:34回答:10

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

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

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

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

ssh proxy terminal
10个回答
51
投票

以下是理查德·克里斯滕森(Richard Christensen)作为单行代码的答案,无需编辑文件(用您自己的设置替换大写,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.

可能是你不小心使用netb的自制版本(你可以通过执行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

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解决问题: 我下载了Tor Browser,运行并等待连接。 我从Ncat得到Nmap distribution并将ncat.exe提取到当前目录中。 在Git Bash中使用Ncat作为ProxyCommand并使用--proxy-type socks4参数添加SSH: ssh -o "ProxyCommand=./ncat --proxy-type socks4 --proxy 127.0.0.1:9150 %h %p" USERNAME@REMOTESERVER 请注意,此Ncat实现不支持socks5。
  • 更好的解决方案: 执行上一步1。 使用connect.c作为Git Bash中的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时) - 假设您在C:\Program Files\Git\中安装了Git Bash - 打开~/.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

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


18
投票

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


8
投票

@rogerdpack for 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

和--proxy与--proxy可以做一个完美的工作


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

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

删除-X connect并使用-proxy代替。

为我工作。


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


0
投票

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

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

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


0
投票

我在我的.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-netcatpacman在询问后删除了gnu-netcat,因为它与openbsd-netcat冲突)。在第一个视图,并检查相应的手册页,openbsd-netcat和Ubuntu netcat似乎非常相似,特别是关于选项-X-x。有了这个,我连接没有问题。

© www.soinside.com 2019 - 2024. All rights reserved.