使用php+shell从一台服务器上读取另一台服务器的文件内容

xiaoxiao2025-04-18  18

需要从服务器1读取服务器2(该服务器上设置了防火墙)上的内容,但是需要通过访问服务器1来完成一些文件的显示~~~耗费了我好几天的时间终于攻克~~~~哈哈哈~~~

1.首先需要解决如何使用PHP从服务器1登陆到服务器2上的问题

方法1:(此方法在我的服务器上运行失败,有需要的可以尝试)

可以参照博客

https://blog.csdn.net/watson2016/article/details/52474001

我尝试了安装之后,在网页测试读取php_info 的内容时,总是不显示ssh2已安装的状态。。。各种切换ssh2的版本,不行。放弃

方法2:使用phpseclib集成方式直接登陆服务器

https://sourceforge.net/projects/phpseclib/files/phpseclib1.0.11.zip/download

下载phpseclib1.0.11.zip并上传到服务器1上,解压到php文件的目录(注意文件权限)。

验证是否作用的方法:

<?php include('Net/SSH2.php'); $ssh = new Net_SSH2('www.domain.tld'); if (!$ssh->login('username', 'password')) { exit('Login Failed'); } echo $ssh->exec('pwd'); echo $ssh->exec('ls -la'); ?>

注意替换成能访问的服务器的域名或者ip。

2.解决第一步之后,编写PHP运行shell命令

#!/usr/bin/php  -q <?php     include('Net/SSH2.php');     $ssh = new Net_SSH2('10.18.217.160');     if (!$ssh->login('root', 'root')) {         exit('Login Failed');     }  

       if(isset($_POST['username']))         {                 $username = trim($_POST['username']);         }     echo "<pre>";     echo $ssh->exec("ls");        echo "</pre>";

?>

在浏览器中运行该php文件,能够正常运行。但是-------------问题来了,我需要动态获取输入的username参数~~~何解。。。尝试通过shell脚本动态获取参数值~~

3. 修改文件运行shell脚本

#!/usr/bin/php  -q <?php     include('Net/SSH2.php');     $ssh = new Net_SSH2('10.18.217.160');     if (!$ssh->login('root', 'root')) {         exit('Login Failed');     }  

       if(isset($_POST['username']))         {                 $username = trim($_POST['username']);         }     echo "<pre>";     echo $ssh->exec("/bin/bash /usr/tools/test.sh $username");        echo "</pre>";

?>

另一个问题来了,在浏览器中死活没有内容输出啊~~~但是在服务器上运行这个php文件是有内容输出的,最后发现我运行这个文件的权限是root权限,而实际该文件执行者为普通用户。

ps:如何确定php文件的运行用户和属组

<?php   exec('whoami');   echo shell_exec("id -a"); ?>

4.确定了文件权限的问题在服务器2上给php文件的运行用户添加需要执行的权限(daemon是我的php文件运行的用户)

vim /etc/sudoers ## Allow root to run any commands anywhere root ALL=(ALL) ALL daemon ALL=(ALL) NOPASSWD:ALL

#!/usr/bin/php  -q <?php     include('Net/SSH2.php');     $ssh = new Net_SSH2('10.18.217.160');     if (!$ssh->login('root', 'root')) {         exit('Login Failed');     }  

       if(isset($_POST['username']))         {                 $username = trim($_POST['username']);         }     echo "<pre>";     echo $ssh->exec("sudo su root -s /bin/bash /usr/tools/test.sh $username");     echo "</pre>";

?>

 

5.再次执行文件,仍然没有内容(抓狂~~~~)

   各种百度最后尝试将php.ini的安全模式打开

    safe_mode =  off打开

  小心翼翼的试了一下,成功了!!!!!

6.可以正常显示文件内容~~~~大功告成

转载请注明原文地址: https://www.6miu.com/read-5028528.html

最新回复(0)