本文主要是介绍ssh over socks5,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
由于你懂的原因,肯能需要通过代理连接ssh,不废话,放命令:
ssh -o ProxyCommand='nc -x 192.0.2.0:1080 %h %p' -p port user@awshost
以下是原理,小白止步:
ProxyCommand可以利用nc做中间通道,从而达到代理的目的。要明白这个过程,需要先了解下nc的用法。
$ man nc
DESCRIPTIONThe nc (or netcat) utility is used for just about anything under the sun involving TCP, UDP, or UNIX-domain sockets. It can open TCP connections, send UDP packets, listen on arbitrary TCP and UDP ports, do port scanning, and deal with both IPv4 and IPv6.Common uses include:· simple TCP proxies· shell-script based HTTP clients and servers· network daemon testing· a SOCKS or HTTP ProxyCommand for ssh(1)· and much, much more-X proxy_protocolRequests that nc should use the specified protocol when talking to the proxy server. Supported protocols are “4” (SOCKS v.4), “5” (SOCKS v.5) and “connect” (HTTPS proxy). If the protocol is not specified, SOCKS version 5 is used.-x proxy_address[:port]Requests that nc should connect to destination using a proxy at proxy_address and port. If port is not specified, the well-known port for the proxy protocol is used (1080 for SOCKS, 3128 for HTTPS).
举个例子。
nc以服务器身份,起一个tcp监听连接。
$ nc -l 2222
netstat可以看到一个2222的监听socket。
然后,nc以客户端身份,连接到上面的tcp的监听socket。
$ nc localhost 2222
此时nc接管shell,随便输入几个字符,就可以在nc服务器端看到刚刚输入的字符。
从这个例子可以看到,nc其实是创建了一个非常单纯的tcp连接,没有任何协议;任何从client输入的数据,都会直接传给server端。
那么,在ssh over socks5这里,nc做了什么呢?
在一个已经通过socks5代理的ssh连接建立的环境上,可以看到有个nc的进程:
nc -x 192.0.2.0:1080 awshost 22
试试直接在shell里输入上面nc的命令,会发现nc与ssh-server建立连接以后,ssh-server发过来了其ssh版本,然后等着nc继续按ssh协议与其交互。随便输入一个’ha!’,由于这个显然不符合ssh协议,所以ssh-server会关掉连接,提示Protocol mismatch。
nc -x 192.0.2.0:1080 awshost 22
SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.1
>ha!
Protocol mismatch.
明白了吗?我无法手工输入ssh协议,但ssh-client可以;nc作为客户端连接到了awshost(当然通过-x指定了nc的socks5代理)后,ssh-client将nc作为一个管道,按ssh协议与ssh-server交互,从而建立了ssh连接。
拓扑如下。
ssh-client --- nc --- proxy --- ssh-server
这篇关于ssh over socks5的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!