如何通过 PHP 执行 SSH 命令
我希望通过 PHP 进行 SSH 输出。最好/最安全的方法是什么?我知道我可以做:
shell_exec("SSH [email protected] mkdir /testing");
还有更好的吗?感觉很“顽皮”:)。
I am looking to SSH out via PHP. What is the best/most secure way to go about this? I know I can do:
shell_exec("SSH [email protected] mkdir /testing");
Anything better? That feels so 'naughty' :).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
我会使用 phpseclib,一个纯 PHP SSH 实现。一个例子:
I would use phpseclib, a pure PHP SSH implementation. An example:
您有可用的 SSH2 扩展吗?
文档: http://www.php.net/manual/en/function .ssh2-exec.php
Do you have the SSH2 extension available?
Docs: http://www.php.net/manual/en/function.ssh2-exec.php
我在 php 中使用 ssh2 遇到了困难,主要是因为输出流有时有效,有时无效。我只是将我的库粘贴到这里,这对我来说非常有用。如果代码中存在小的不一致,那是因为我已将其插入框架中,但您应该可以很好地移植它:
I've had a hard time with ssh2 in php mostly because the output stream sometimes works and sometimes it doesn't. I'm just gonna paste my lib here which works for me very well. If there are small inconsistencies in code it's because I have it plugged in a framework but you should be fine porting it:
//更新2018,有效 //
方法一:
下载phpseclib v1 并使用此代码:
或方法2:
下载最新的 phpseclib v2 (需要
composer install
首先):ps如果您收到“连接超时”,那么可能是主机/防火墙(本地或远程)或类似问题,而不是故障的脚本。
//Update 2018, works//
Method1:
Download phpseclib v1 and use this code:
or Method2:
Download newest phpseclib v2 (requires
composer install
at first):p.s. if you get "Connection timed out" then it's probably the issue of HOST/FIREWALL (local or remote) or like that, not a fault of script.
对于使用 Symfony 框架的用户,phpseclib 也可用于通过 SSH 连接。可以使用composer来安装:接下来,只需按如下方式使用它:
For those using the Symfony framework,the phpseclib can also be used to connect via SSH. It can be installed using composer:Next, simply use it as follows:
使用
ssh2
函数。您通过 exec() 调用执行的任何操作都可以直接使用这些函数完成,从而节省大量连接和 shell 调用。Use the
ssh2
functions. Anything you'd do via an exec() call can be done directly using these functions, saving you a lot of connections and shell invocations.