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 程式的寫法
- <?php
- // SCP 測試
- $output = shell_exec("scp /root/test.txt root@123.234.111.222:/root/test.txt");
- echo $output;
- ?>
還有另外寫法:
直接秀出 whomi的結果:
<?php
echo exec("whoami");
?>