Nasıl mı proxy olsa ssh (socksâ € |) kullanarak bir sunucu PHPA € ™ s CURL kullanarak?

4 Cevap php

Ben, ssh kullanmak için böyle bir şey istiyorum:

ssh -D 9999 username@ip-address-of-ssh-server

Ama php CURL içinde, ama ben gerçekten bu yapılabilir nasıl görmüyorum?

Ben ssh var, php site bir türü olarak "CURLPROXY_SOCKS5 olabilir" fark ettim, ama gerçekten çorap değil çünkü bu işe olmaz sanırım ...

Şu anda bu kodu kullanıyorum:

curl_setopt($ch, CURLOPT_PROXY, ‘ip:port'); 

Ama ben özgür bir proxy kullanarak yaşıyorum ve oldukça yavaş ve güvenilmez, ben de bu proxy üzerinden hassas bilgiler yolluyorum. Ben proxy için güvendiğim bir tasarruf sunucu bitmesini istiyoruz bu yüzden, ama ben sadece bunun üzerinde ssh kurulum ve uygun bir vekil ev sahipliği yapamaz.

4 Cevap

Eğer bir PHP komut dosyası içinde libssh2 ve kıvrım her ikisini de kullanabilirsiniz.

  • Önce PECL sitesinden get the ssh2 library gerekir. Alternatif olarak, PEAR package çok SSH2 desteği vardır.
  • Yükledikten sonra sonra bir tünel kurma hakkında ssh2 documentation okuyabilirsiniz.
  • Lütfen komut sonra tünel kurabilirsiniz.
  • Tünel komut kurmak sonra CURL vekil belirtebilirsiniz.
  • Lütfen CURL işlemini gerçekleştirin.
  • Tünel kaynak bırakın ve komut bağlantısını kapatın.

Ben bir PHP uzmanı değilim, ama burada kaba bir örnek:

<?php
$connection = ssh2_connect(ip-address-of-ssh-server, 22);
ssh2_auth_pubkey_file($connection, 'username', 'id_dsa.pub', 'id_dsa');
$tunnel = ssh2_tunnel($connection, '127.0.0.1', 9999);
curl_setopt($ch, CURLOPT_PROXY, ‘127.0.0.1:9999'); 
// perform curl operations

// The connection and tunnel will die at the and of the session.
?>

The simplest option

Düşünün başka bir seçenek yerine CURL arasında (SSH üzerinden FTP) SFTP kullanıyor ... Bu muhtemelen PHP güvenli bir sunucudan bir dosyayı kopyalamak için önerilen bir yoldur ...

Hatta daha basit örneği:

<?php
$connection = ssh2_connect(ip-address-of-ssh-server, 22);
ssh2_auth_password($connection, 'username', 'password');
ssh2_scp_send($connection, '/local/filename', '/remote/filename', 0644);
?>

göre manpage-D çorap proxy oluşturmak yapar.

-D [bind_address:]port
             Specifies a local ``dynamic'' application-level port forwarding.
             This works by allocating a socket to listen to port on the local
             side, optionally bound to the specified bind_address.  Whenever a
             connection is made to this port, the connection is forwarded over
             the secure channel, and the application protocol is then used to
             determine where to connect to from the remote machine.  Currently
             the SOCKS4 and SOCKS5 protocols are supported, and ssh will act
             as a SOCKS server.  Only root can forward privileged ports.  Dy-
             namic port forwardings can also be specified in the configuration
             file.

Qwerty önerdiği çözüm benim yorum bkz. Bu soruyu çözmek için denemek için yanlış yönde arıyoruz düşünüyorum. Bunun yerine, sadece cURL kullanmak ve kendiniz için kişisel bir sertifika oluşturmak gerekir. Eğer güvenlik için SSH kullanmak istediklerini söylüyorlar, ama neden bir sertifika yerine?

This site will let you easily create one http://www.cacert.org/

Sadece sizin için var çünkü onlar kötü bir sertifika şikayet olmaz, bu yüzden sizin tarayıcılar için bir istisna ekleyebilirsiniz. Ssh gerek yok!

Sadece script süresince SSH tüneli açmak için, muhtemelen kullanmak gerekir PHP forks. (- Eğer burada portları üzerinde çarpışarak değil emin olmak için bazı işler yapmak gerekir-D), ve diğer süreç içinde, çorap vekil config CURL kullanması bir süreçte, SSH tüneli açın. Eğer transfer yapıldığında, bu yüzden bağlantı yıkılıyor alır sonlandırmak için ssh çatal sinyal.

Tünel açıkken, aynı makinede diğer kullanıcıların da onlar için bu port proxy istedim eğer unutmayın. Unutmayın ki, o-L 1234 kullanmak için iyi bir fikir olabilir: uzakmakine: 80 bayrak ve sadece URL almak http://localhost:1234/some/uri

Şeyler bu yanlış giderseniz, olsa sunucu üzerinde yetim SSH tünelleri bulmak olabilir, bu yüzden bu biraz kırılgan çağırır.