Как Вы проксируете хотя сервер с помощью ssh (носки …) использование ЗАВИХРЕНИЯ php?

Я хочу использовать ssh, что-то вроде этого:

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

Но в ЗАВИХРЕНИИ php, но я действительно не вижу, как это могло быть сделано?

Я заметил “CURLPROXY_SOCKS5” как тип в php сайте, но угадайте, что это не работало бы, так как это не действительно носки, это - ssh …

Я в настоящее время использую этот код:

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

Но я использую свободный прокси, и это довольно медленно и ненадежно, я также отправляю уязвимую информацию по этому прокси. Поэтому я хочу проксировать его по серверу сохранения, которому я доверяю, но у меня только есть установка ssh на нем, и это не может разместить надлежащий прокси.

5
задан Charles 24 December 2012 в 23:08
поделиться

5 ответов

согласно man-странице -D действительно создает прокси-сервер socks.

-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.
2
ответ дан 14 December 2019 в 13:35
поделиться

Вы можете использовать модуль ssh2 и функцию ssh2_tunnel для создания ssh-туннеля через удаленный сервер. Примеры: http://www.php.net/manual/en/function.ssh2-tunnel.php

0
ответ дан 14 December 2019 в 13:35
поделиться

См. Мой комментарий к решению, предлагаемому Qwerty. Я думаю, что вы смотрите не в том направлении, пытаясь решить этот вопрос. Вместо этого вы должны просто использовать cURL и создать для себя персональный сертификат. Вы говорите, что хотите использовать SSH для безопасности, но почему бы вместо этого не использовать сертификат?

Этот сайт позволит вам легко создать его http://www.cacert.org/

Поскольку он предназначен только для вас, вы можете добавить исключение в свои браузеры, чтобы они выиграли » Я жаловался на плохой сертификат. Нет необходимости в ssh!

0
ответ дан 14 December 2019 в 13:35
поделиться

Чтобы открыть туннель SSH только на время работы вашего скрипта, вам, вероятно, потребуется использовать вилки PHP . В одном процессе откройте туннель SSH (-D - вам нужно поработать, чтобы убедиться, что вы не сталкиваетесь с портами здесь), а в другом процессе используйте CURL с конфигурацией прокси-сервера socks. Когда ваша передача будет завершена, сигнализируйте вилке ssh о завершении, чтобы соединение было разорвано.

Имейте в виду, что пока туннель открыт, другие пользователи на той же машине могут также использовать прокси-сервер на этом порту, если захотят. Имея это в виду, было бы лучше использовать флаг -L 1234: remotehost: 80 и просто получить URL http: // localhost: 1234 / some / uri

Если что-то пойдет не так с при этом вы можете найти на своем сервере осиротевшие туннели SSH, поэтому я бы назвал это несколько хрупким.

0
ответ дан 14 December 2019 в 13:35
поделиться

В сценарии PHP можно использовать как libssh2, так и curl.

  • Сначала вам нужно получить библиотеку ssh2 с сайта PECL. В качестве альтернативы пакет PEAR также поддерживает SSH2.
  • После установки вы можете прочитать документацию по ssh2 по настройке туннеля.
  • Затем в вашем скрипте вы можете настроить туннель.
  • После того, как туннель настроен в сценарии, вы можете указать прокси CURL.
  • Выполните операцию CURL.
  • Освободите туннельный ресурс и закройте соединение в вашем скрипте.

Я не эксперт по PHP, но вот грубый пример:

<?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.
?>

Самый простой вариант

Другой вариант, который следует рассмотреть, - использовать sftp (ftp over ssh) вместо CURL ... это, вероятно, рекомендуемый способ для безопасного копирования файла с одного сервера на другой в PHP ...

Еще более простой пример:

<?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);
?>
4
ответ дан 14 December 2019 в 13:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: