PHP保持SSH会话存活/存储

时间:2015-05-25 09:32:30

标签: php codeigniter ssh phpseclib

我正在使用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');

1 个答案:

答案 0 :(得分:0)

在不提示输入密码的情况下使SSH登录的唯一方法是使用公钥加密。

查找SSH login automation。如果网站出现故障,请引用该网站:

  

你的目标

     

您希望使用Linux和OpenSSH自动执行任务。因此,您需要从主机A /用户a到主机B /用户b的自动登录。您不想输入任何密码,因为您想从shell脚本中调用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在B上创建一个目录〜/ .ssh作为用户b。(该目录可能已经存在,这很好):

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

最后将一个新的公钥附加到b@B:.ssh/authorized_keys并最后一次输入b的密码:

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

从现在开始,您可以从A登录B作为b,无密码:

a@A:~> ssh b@B

除此之外,守护PHP进程以便它在后台维护其会话是一个坏主意:

  1. PHP对此不利。
  2. 第二件事情发生了:断电,重新启动......,您的设置已经消失。到那个时候你可能已经忘记它做了这样的事情。