使用PHP與SSH端連線

php有個ssh2的Function可以利用它來跟ssh端作連線,但是必須另外編譯 libssh 和 ssh2 這二個套件 ,本篇介紹安裝以及使用php連接ssh

準備:
libssh2 ssh2 libssh2_path 下載所需要的檔案
註: libssh2_path 編議有錯誤時會用到


安裝:
# 安裝 libssh2

1. 解壓縮後並進入該目錄
2. ./configure –prefix=/usr  && make all install
註: –prefix=/usr 將libssh2安裝在 /usr下

# 安裝 ssh2
1. 解壓縮後並進入該目錄

2. ./configure –with-ssh2 –with-php-config=/usr/local/php/bin/php-config
註:
–with-php-config=/usr/local/php/bin/php-config php-config 的位置

3. make
註:
如果在make 時有發生錯誤如該libssh2_path網站同樣的錯誤訊息的話,
可以下載該網站提供的path使用, 將下載下來的檔案copy到該目錄下,
並執行 patch < php-libssh2.diff 這指令 , 重新make 一次就可以make成功

4. 將編譯好的ssh2所產生的ssh2.so 檔案 copy 到你指定的 extensions 目錄下
cp modules/ssh2.so /usr/local/php/lib/php/extensions/
註: 如果尚未指定 php 的 extensions 位置 則必須先在php.ini 裡設定
/usr/local/php/lib/php/extensions/ 該目錄為我指定的php extensions 目錄
如果對 php 的 extensions 有問題的話 可以西先參考一下這篇
PHP如何手動編譯自己所需的extensions檔案

利用php連接ssh的簡單範例

<?
$_ip = "";
$_port = "";
$_user = "";
$_passord = "";

echo "Connexion SSH <br/>";
if (!($connection=@ssh2_connect($_ip, $_port))) {
echo "Connect SSH [FAILED]<br/>";
exit(1);
}
echo "Connect SSH [OK]<br/>";

if (!@ssh2_auth_password($connection,$_user,$_passord)) {
echo "Login SSH [FAILED]<br/>";
exit(1);
}
echo "Login SSH [OK]<br/>";

$stdout_stream = ssh2_exec($connection, "ls");
sleep(1);

while($line=fgets($stdout_stream)){
echo $line.’<br/>’;
}

fclose($stdout_stream);
?>

Related Posts with Thumbnails

相關文章

28 thoughts on “使用PHP與SSH端連線

  1. 安裝 libssh2 應該沒有啥問題…
    我剛編譯過一次 沒有錯誤~
    有錯誤訊息可以看嗎?

    風險高的意思是…如果你用php去執行ssh的話,那麼就等於是打開一扇門出來,讓有心人可以試,光單純用ssh就有一堆有心人在try密碼了,更何況用網頁方式…

  2. 你好

    checking whether to enable maintainer-specific portions of Makefiles… no
    checking for sed… /bin/sed
    checking for a BSD-compatible install… /usr/bin/install -c
    checking whether build environment is sane… yes
    checking for gawk… gawk
    checking whether make sets $(MAKE)… yes
    checking libssh2 version… 0.18
    checking build system type… x86_64-unknown-linux-gnu
    checking host system type… x86_64-unknown-linux-gnu
    configure: autobuild project… libssh2
    configure: autobuild revision… 0.18
    configure: autobuild hostname… moodle.fgu.edu.tw
    configure: autobuild timestamp… 20081104-130306
    checking host system type… (cached) x86_64-unknown-linux-gnu
    checking for style of include used by make… GNU
    checking for gcc… no
    checking for cc… no
    checking for cl.exe… no
    configure: error: no acceptable C compiler found in $PATH
    See `config.log’ for more details.

  3. 你好
    成功了
    但[root@moodle ssh2-0.10]# ./configure –with-ssh2 –with-php-config=/usr/local/php/bin/php-config
    bash: ./configure: 瘝奨?甇支?瑼鯏??緐澻??

  4. –with-php-config=/usr/local/php/bin/php-config
    你這段不能照打,因為你安裝的php位置跟我的應該是不一樣, 你必須打你的php-config所在的位置

  5. 不要這樣說~ "菜",每個人都菜過 只要有心學習就好囉~

    我覺得你可以先去摸摸別的東西~像是怎麼編譯之類的
    php apache …等等之類的

    有問題歡迎問我呀~如果我知道的我回告訴你的 ^^

  6. 喔~不是說用ssh危險(雖然SSH本身沒有設好也會有危險),而是利用php去控制ssh這方法危險,不危險的?那就不要用 XD

    比較不危險的~IP,帳號,密碼 是寫在PHP裡面,但是如果你是做對LINUX刪除或其它動作的話,別人也是只要執行該PHP就會去做動作了…

    不過~你有何需求需要利用PHP去連SSH?

    如果只是想要用php去執行linux指令的話,
    php有個 shell_exec()這函式可以直接用,但是也是不建議使用這種方法~

  7. 控制連到這台機器中的IP(電腦)能夠上網與否<–這一句我不是很懂

    你的意思是所有的ip(電腦)都會透過這台linux連網路?
    如果是的話 你想要在linux上控制某一個ip(電腦)讓它上網與否?

    假設是這樣的話你的方向完全錯囉~~這應該是要用iptables來做

  8. 你好
    的確想要在linux上控制某一個ip(電腦)讓它上網與否
    連上來得電腦不是固定的,她登入後須經由老師開放才能出去
    因操作者是上課老師,這些老師非資訊相關科系
    介面 越簡單越好

  9. 嗯…所以你一開始的方式有不對~
    應該是要用iptales來做

    登入的動作是什麼?
    你是用dhcp讓使用者取得ip嗎?

    如果是(ip)電腦不是固定的,那麼使用者換個ip就可以?

    我大概想一下作法應該是
    1. 先全擋住內網ip不能上網
    2. 老師有一內網ip列表,然後設定哪些ip可以出去
    3. 將老師所選可以出去的ip寫進iptables
    4. 執行該 shell script

發表迴響

您的電子郵件位址並不會被公開。 必要欄位標記為 *

*

您可以使用這些 HTML 標籤與屬性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>