我正在使用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');
答案 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进程以便它在后台维护其会话是一个坏主意: