如何使用SSH在另一台服务器上以PHP运行CLI命令?

时间:2018-05-25 08:55:10

标签: php ssh command-line-interface

我正在尝试在PHP中运行CLI命令,但是在不同的服务器上。为了在另一台服务器上运行该命令,我使用的是linux ssh命令。为了在PHP中运行CLI命令,我使用exec()

这有效......

$output = exec('cut -d: -f1 /etc/passwd'); //works!

这可以从一台服务器的命令行运行到另一台服务器......

ssh my.otherserver.com "date"

但是,当我尝试在PHP中执行此操作时,它无效...

$output = exec('ssh my.otherserver.com "date"'); //does not work!

我想做的是什么?我该怎么做呢?提前谢谢。

3 个答案:

答案 0 :(得分:1)

使用ssh连接到您的服务器,您需要使用ssh2_exec php函数。

我建议你使用phpseclib,它是PHP SSH实现的包装器

答案 1 :(得分:1)

ssh2_connect或phpseclib

您可以使用ssh2_connect或phpseclib。在我的EC2实例上,我必须为ssh2_connect安装软件包(例如yum install php56-pecl-ssh2-0.12-5.15.amzn1.x86_64),因为它默认不存在。注意:这也可以使用bash脚本完成。

<?php

//ssh2_connect:
$connection = ssh2_connect('localhost', 22);
ssh2_auth_password($connection, 'user', 'password');
$stream = ssh2_exec($connection, 'ls -l > /tmp/worked.txt');

//phpseclib:
include('Net/SSH2.php');
$ssh = new Net_SSH2('www.example.com');
$ssh->login('username', 'password') or die("Login failed");
echo $ssh->exec('command');

进一步阅读:

http://phpseclib.sourceforge.net/

http://php.net/manual/en/function.ssh2-connect.php

答案 2 :(得分:1)

需要:

sudo apt install php-ssh2

此示例将从远程php服务器接收ls -ltrapR的输出。

#!/usr/bin/php
<?php
$con=ssh2_connect('223.245.xx.xx', 22);
ssh2_auth_password($con, 'root', 'bybyDRRxxxx');
$shell=ssh2_shell($con, 'xterm');
$stream = ssh2_exec($con, 'ls -ltrapR');
stream_set_blocking($stream, true);
$out = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO);
echo stream_get_contents($out);

注意,因为它只是使用基本的auth(精细的ssl,更好地使用vpn)。 可以使用cryptographic keyselse进一步保密。