Я хочу использовать ssh, что-то вроде этого:
ssh -D 9999 username@ip-address-of-ssh-server
Но в ЗАВИХРЕНИИ php, но я действительно не вижу, как это могло быть сделано?
Я заметил “CURLPROXY_SOCKS5” как тип в php сайте, но угадайте, что это не работало бы, так как это не действительно носки, это - ssh …
Я в настоящее время использую этот код:
curl_setopt($ch, CURLOPT_PROXY, ‘ip:port');
Но я использую свободный прокси, и это довольно медленно и ненадежно, я также отправляю уязвимую информацию по этому прокси. Поэтому я хочу проксировать его по серверу сохранения, которому я доверяю, но у меня только есть установка ssh на нем, и это не может разместить надлежащий прокси.
согласно 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.
Вы можете использовать модуль ssh2 и функцию ssh2_tunnel
для создания ssh-туннеля через удаленный сервер.
Примеры: http://www.php.net/manual/en/function.ssh2-tunnel.php
См. Мой комментарий к решению, предлагаемому Qwerty. Я думаю, что вы смотрите не в том направлении, пытаясь решить этот вопрос. Вместо этого вы должны просто использовать cURL и создать для себя персональный сертификат. Вы говорите, что хотите использовать SSH для безопасности, но почему бы вместо этого не использовать сертификат?
Этот сайт позволит вам легко создать его http://www.cacert.org/
Поскольку он предназначен только для вас, вы можете добавить исключение в свои браузеры, чтобы они выиграли » Я жаловался на плохой сертификат. Нет необходимости в ssh!
Чтобы открыть туннель SSH только на время работы вашего скрипта, вам, вероятно, потребуется использовать вилки PHP . В одном процессе откройте туннель SSH (-D - вам нужно поработать, чтобы убедиться, что вы не сталкиваетесь с портами здесь), а в другом процессе используйте CURL с конфигурацией прокси-сервера socks. Когда ваша передача будет завершена, сигнализируйте вилке ssh о завершении, чтобы соединение было разорвано.
Имейте в виду, что пока туннель открыт, другие пользователи на той же машине могут также использовать прокси-сервер на этом порту, если захотят. Имея это в виду, было бы лучше использовать флаг -L 1234: remotehost: 80 и просто получить URL http: // localhost: 1234 / some / uri
Если что-то пойдет не так с при этом вы можете найти на своем сервере осиротевшие туннели SSH, поэтому я бы назвал это несколько хрупким.
В сценарии PHP можно использовать как libssh2, так и 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);
?>