PHP 使用SUDO 來執行LINUX 系統命令的方法
1. 安裝 Sudo PHP  這是一定要裝的
2. 因為預設APACHE 的使用者不是root所以會不能跑sudo這個指令,需要修改:
    2.1  一定使用 visudo 來修該資料這樣確保可以正常的運作,說明如下:
           
不要直接編輯組態檔 /etc/sudoers,改用 visudo 來做編輯。
          visudo 為防止多個使用者同時修改,它會先鎖住 /etc/sudoers,
          並且確保組態檔的文法正確, 一旦發現錯誤會拒絕儲存動作。

    2.2 需要修改的內容:
         
找到下面這行指令:將前面註解起來(這行不註解會不能使用)
          將這行    Defaults requiretty
          改成       # Defaults requiretty
          移到最後面,將妳要開放直行的指令寫入這個檔案()
          apache ALL=(ALL) NOPASSWD:/usr/bin/scp
3.因為SCP是需要密碼的,我們寫PHP需要改成免密碼的這樣才可以正確執行,方法如下
     
===================免密碼  SCP 的方法如下=================================================
       A為本地主機(即用於控制其他主機的機器) ;
       B為遠程主機(即被控制的機器Server), 假如ip為123.234.111.222  
       A和B的系統都是Linux

      在A上的命令:

       3.1. 用下面的指令:然後連續按下enter 就可以產生金鑰
                # ssh-keygen -t rsa
               Generating public/private rsa key pair.
               Enter file in which to save the key (/root/.ssh/id_rsa):
               Created directory '/root/.ssh'.
               Enter passphrase (empty for no passphrase):
               Enter same passphrase again:
               Your identification has been saved in /root/.ssh/id_rsa.
               Your public key has been saved in /root/.ssh/id_rsa.pub.
               The key fingerprint is:
               ac:28:72:56:71:81:71:43:d1:86:17:26:3f:cd:df:7d root@localhost.localdomain
         
        3.2.在root/.ssh底下會產生兩個檔案
               -rw-------  1 root root 1.7K 11月 26 15:9 id_rsa
               -rw-r--r--  1 root root  408 11月 26 15:9 id_rsa.pub
              id_rsa 一定要是如上的權限不然會很危險
       3.3.將id_rsa.pub拷貝到遠端的電腦內
             如果電腦沒有這樣的目錄續要下面的過程建立目錄
             # ssh root@123.234.111.222 "mkdir .ssh;chmod 0700 .ssh" (需要輸入密碼)
            將檔案copy到我們要遠端的主機
            # scp ~/.ssh/id_rsa.pub root@123.234.111.222:.ssh/id_rsa.pub (需要輸入密碼)
           記得這個檔案的權限要改成644避免被亂改

          在B上的命令:
                # touch /root/.ssh/authorized_keys2 (如果已經存在這個文件, 跳過這條)
                # cat /root/.ssh/id_rsa.pub  >;>; /root/.ssh/authorized_keys2 (將id_rsa.pub的內容追加到 authorized_keys2 中)

          回到A機器:
               # scp  /root/test.txt root@123.234.111.222:/root/test.txt  (不需要密碼, 登錄成功)
 
4.PHP 程式的寫法
   
  1. <?php
  2. // SCP 測試
  3. $output = shell_exec("scp  /root/test.txt root@123.234.111.222:/root/test.txt");
  4. echo $output;
  5. ?>
  還有另外寫法:
  直接秀出 whomi的結果:
   <?php
   echo exec("whoami");
   ?>