PHP Сохранение / сохранение сеанса SSH

Я использую Codeigniter, и ниже приведен код, который я использую для получения некоторой информации с устройства через SSH. Весь процесс занимает около 2,2 секунд, из которых 2 секунды - это процесс входа в систему. Есть ли способ сохранить или сохранить сеанс хотя бы в течение определенного времени? Библиотека, которую я использую для подключения, phpseclib

        $time = microtime(true);
        $this->ssh2->Net_SSH2('XX.XX.XX.XX');
        if (!$this->ssh2->login('XXXX', 'XXXXXXXX')) {
            exit('Login Failed');
        }
        echo (microtime(true) - $time) . ' elapsed';
        $string = $this->ssh2->exec('/usr/www/status.cgi');

person LefterisL    schedule 25.05.2015    source источник
comment
Вы действительно имеете в виду, что сервер отключает вашу сессию после 2 секунд бездействия? Или с какой проблемой собственно столкнулись?   -  person Martin Prikryl    schedule 25.05.2015
comment
Я хочу выполнять некоторые команды каждые 15-20 секунд без необходимости каждый раз входить в систему для выполнения этой команды. По сути, это будет задача cron, получающая статистику с устройства каждые 15-20 секунд.   -  person LefterisL    schedule 25.05.2015
comment
Так в чем проблема? Почему бы тебе не положить его в cron?   -  person rr-    schedule 25.05.2015
comment
У меня он есть в cron, но мне нужно входить в систему каждый раз, когда я запускаю функцию. Я хочу, чтобы мне не приходилось входить в систему каждые 15 секунд.   -  person LefterisL    schedule 25.05.2015
comment
Вы не можете запустить / остановить PHP-скрипт и сохранить соединение. Вам понадобится постоянный сокет, чтобы соединение оставалось открытым, а PHP pfsockopen не подходит для этой задачи. Думаю, вы могли бы просто запустить скрипт вечно. Пусть он спит 15 секунд после каждого звонка. В этот момент может потребоваться keep-alive из phpseclib (например, засыпать 7 секунд, отправить keep-alive и засыпать еще 7 секунд).   -  person neubert    schedule 26.05.2015


Ответы (1)


Единственный способ выполнить вход по SSH без запроса пароля - это использовать криптографию с открытым ключом.

Найдите автоматизацию входа по SSH. Чтобы процитировать сайт в случае его сбоя:

Ваша цель

Вы хотите использовать Linux и OpenSSH для автоматизации своих задач. Поэтому вам нужен автоматический вход с хоста A / пользователя a на хост B / пользователя b. Вы не хотите вводить какие-либо пароли, потому что вы хотите вызвать ssh из сценария оболочки.

Как это сделать

Сначала войдите в систему A как пользователь a и сгенерируйте пару ключей аутентификации. Не вводите кодовую фразу:

a@A:~> ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/a/.ssh/id_rsa): 
Created directory '/home/a/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/a/.ssh/id_rsa.
Your public key has been saved in /home/a/.ssh/id_rsa.pub.
The key fingerprint is:
3e:4f:05:79:3a:9f:96:7c:3b:ad:e9:58:37:bc:37:e4 a@A

Теперь используйте ssh для создания каталога ~ / .ssh от имени пользователя b на B. (каталог может уже существовать, и это нормально):

a@A:~> ssh b@B mkdir -p .ssh
b@B's password: 

Наконец, добавьте новый открытый ключ a в b@B:.ssh/authorized_keys и введите пароль b в последний раз:

a@A:~> cat .ssh/id_rsa.pub | ssh b@B 'cat >> .ssh/authorized_keys'
b@B's password: 

С этого момента вы можете войти в B как b из A как a без пароля:

a@A:~> ssh b@B

В остальном демонизировать PHP-процесс, чтобы он поддерживал сеанс в фоновом режиме, - плохая идея:

  1. PHP для этого плох.
  2. Во-вторых, что-нибудь произойдет: отключение питания, перезагрузка, ... ваша настройка пропала. К тому времени вы, вероятно, забудете, что это такое.
person rr-    schedule 25.05.2015