PHP ssh2_tunnel: ¿Usando proxy / calcetines lanza el servidor ssh?

Quiero utilizar proxy / calcetines lanzar servidor ssh y he encontrado un buen ejemplo desde aquí ¿Cómo proxy a través de un servidor utilizando ssh (calcetines …) utilizando CURL de php? pero el ejemplo no funciona, aquí está mi código.

 

Cuando ejecuto este script tengo respuesta de error:

 Warning: ssh2_tunnel() [function.ssh2-tunnel]: Unable to request a channel from remote host in /home/domain.com/ssh2/index.php on line 7 Tunnel creation failed. 

Buscaré en Google este error e intentaré solucionarlo, pero no puedo resolver los problemas.

¿Alguien puede ayudarme?

Parece que ssh_tunnel no funciona así, ssh_tunnel solicitará la “$ conexión” para realizar un túnel al puerto / IP especificado.

En su código supongo que está tratando de crear un puerto local que escuche las solicitudes cURL como proxy, pero básicamente le está pidiendo al servidor ssh que se conecte consigo mismo (127.0.0.1).

Como puede ver en mi ejemplo, el túnel hacia Google es solo una secuencia a través de la cual puede enviar solicitudes de transmisión

 $connection = ssh2_connect($sshServerIP, 22); ssh2_auth_password($connection, $sshServerUser, $sshServerPass); $sock = ssh2_tunnel($connection, "google.com", 80); fwrite($sock, "GET /? HTTP/1.0\r\n\r\n"); $body = ""; while (!feof($sock)) $body .= fgets($sock); echo $body; 

Puede abrir un puerto local antes de solicitar el túnel a su puerto / ip a través de:

 $localsock = socket_create_listen(0); socket_getsockname($localsock, $YourInternetIPaccessible, $openedPort); 

Y luego tu código con estos cambios:

 $connection = ssh2_connect("64.246.126.25", 22); if(ssh2_auth_password($connection, "ubnt", "ubnt")) { if ($tunnel = ssh2_tunnel($connection, $YourInternetIPaccessible, $openedPort)) { $url = "http://checkip.dyndns.com/"; $agent= 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)'; $ch = curl_init(); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_USERAGENT, $agent); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_PROXY, "127.0.0.1:$openedPort"); curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); $result = curl_exec($ch); echo $result; }else{ echo "Tunnel creation failed.\n"; } } else { echo "failed!"; }