我目前正在用PHP编写一个部署框架。该框架连接到服务器,并通过SSH执行命令。我已经找了很长一段时间了,试图在PHP中找到一种更好的方法。这是要求。这项技术应能够:
目前,我的框架将部署脚本中的命令“编译”成一个巨大的字符串,并使用SSH命令执行它们。每个最终部署命令如下所示:
ssh -t -t -p 12345 user@server.com 'command1; command2;'
这些SSH命令中的每一个都通过PHP的内置passthru函数执行:
<?php passthru("ssh -t -t -p 12345 user@server.com 'command1; command2;'"); ?>
我尝试过使用proc_open和几乎所有PHP的其他命令--执行都没有用--它们都没有提供我上面列出的所有功能。此外,我尝试了几个纯PHP实现,但也没有效果。库要么不提供对终端的写访问,要么不支持SSH v2。
在这方面的任何帮助都将不胜感激-谢谢!
发布于 2011-01-19 03:26:33
您认为以下是对终端的写入访问的示例吗?:
ssh -t -t -p 12345 user@server.com 'command1; command2;'如果是这样的话,那么您可以使用phpseclib的纯PHP SSH实现来完成这个任务。例如:
$ssh = new Net_SSH2(...);
$ssh->login(..., ...);
$ssh->exec('command1; command2;');如果不是那样的话,(1)我会说,使用phpseclib比使用当前的实现要好;(2)如果您想要phpseclib作者所提到的“交互式”支持,那么您可以尝试联系作者吗?也许可以给他一些钱来激励他开发这个功能。从支持论坛上看,作者似乎有足够的反应能力。
发布于 2011-01-19 00:02:55
我不确定php是正确的工具。为什么不使用更接近shell环境的东西,比如bash脚本?
我能想象您想要使用PHP的唯一原因是,您可以通过单击某个页面上的链接来启动该过程,从而在您的系统应该具有的任何安全性上都会出现一个很大的漏洞。但是,如果确实必须这样做,那么用更友好的shell语言编写脚本还是更容易的,只需使用php作为网关来调用脚本。
发布于 2011-01-18 23:34:36
您可以使用PHP中的PECL扩展进行SSH连接。http://php.net/manual/en/book.ssh2.php
$connection = ssh2_connect('server.com', 22);
ssh2_auth_password($connection, 'username', 'password');
$stream1 = ssh2_exec($connection, $command1);
$stream2 = ssh2_exec($connection, $command2);如果您需要更高级的东西,还可以使用ssh2_shell()创建一个ssh交互式shell。
https://stackoverflow.com/questions/4730206
复制相似问题