黑夜给了我黑色的眼睛,我却用它来寻找光明
将SSH与PHP相连接 确保传输数据的安全
2008-01-16 17:50:45
SSH可以通过将联机的封包加密的技术进行资料的传递;
使用SSH可以把传输的所有数据进行加密,即使有人截获到数据也无法得到有用的信息…… SSH可以通过将联机的封包加密的技术进行资料的传递;
使用SSH可以把传输的所有数据进行加密,即使有人截获到数据也无法得到有用的信息。同时数据经过压缩,大大地加快了传输的速度。总之,通过SSH的使
用,可以确保资料传输比较安全并且传输效率较高。PHPChina 开源社区门户Sm/F!x.WA z
不过,并非所有人知道PHP可以与SSH连接的特性以及与执行远程命令的能力,不过这方面却非常有用。由于我们可以在很多不同的方面利用PHP,因此 它有很多设置选项来控制其行为。一组庞大的可选参数能够保证您可以将 PHP用于许多不同的目的,但这同时也意味着这些参数和服务端配置的组合会带来一些安全问题。笔者一直在PHPCLI应用程序中使用SSH,笔者是从 cronjobs中使用它的,不过一开始并非十分简单,可以说颇费周折。关于安全使用Shell2函数的手册也不是十分实用,笔者进行了多次试验之后才有 了今天这篇小文章,愿您读了之后能为您配置PHP节省一点儿时间。
wj!\x{&E_+z u-e0 在这篇文章中,笔者需要假设:
P-j'`&l`B2|T$` h0 你正在运行的操作系统是Debian / Ubuntu。如果你运行的不是Debian / Ubuntu,你可能需要用你的Linux发行版本提供的数据包管理器来替换本文对应内容。PHPChina 开源社区门户Xhc5lrxFF
你运行的是PHP5.如果你运行的不是PHP5,可用PHP4代替之。PHPChina 开源社区门户A5Usi9Yzo7n
你对PHP和服务器管理有基本的了解。
}(mp ii$p l5O!^0 你已经安装了PHP。PHPChina 开源社区门户'r}bIH
先决条件
)f7boFAR/g9T(d+M0_0 安装程序包PHPChina 开源社区门户k R)F6pp4_;C
首先,让我们安装下面的程序包:
5d'_l;APp1^0 sudo aptitude updatePHPChina 开源社区门户`8mL$L}
sudo aptitude install php5-dev php5-cli php-pear buid-essential \PHPChina 开源社区门户JW4BTb
openssl-dev zlib1g-devPHPChina 开源社区门户?o$M/oWJTd7e
安装完成进入下一步。PHPChina 开源社区门户I*BeInmz
编译libssh2PHPChina 开源社区门户^D_gd1HT\
在从sourceforge网站下载了Libssh2之后,我们需要编译它,不过不要担心,你只需要按照如下的方法操作:
3NtOx&hIe5a/k0 cd /usr/srcPHPChina 开源社区门户0CL5ami|UUK5K
wget surfnet.dl.sourceforge.net/sourceforge/libssh2/libssh2-0.14.tar.gzPHPChina 开源社区门户2t&}"S$p:]`;r4\y
tar -zxvf libssh2-0.14.tar.gzPHPChina 开源社区门户8J;N%RL uCl5i$|
cd libssh2-0.14/
{ vM:v4NX0 ./configurePHPChina 开源社区门户\ fB!D5{"C
make all installPHPChina 开源社区门户5Y?,jm^
如果你想检查是否有了一个新版本,可以查看SF.NET.不过,0.14这个版本就足够了。PHPChina 开源社区门户b.Y2H3wwGi]
安装
IIZ2q R&{0 安装ssh2.so
zi#r,y4R0 下一步,我们需要将libssh和 PHPr链接起来。有一个PECL模块可以完成这个功能。我们可以使用PEAR安装它。PHPChina 开源社区门户] w;M.GJ m
pear install -f ssh2
"v"ZYI1?!|*O z0 -f参数确保SSH2被安装,即使并没有一个稳定的选择对象。你还可以使用如下的包名称:ssh2-beta来强行运行。PHPChina 开源社区门户7r P9B;ENys'zT
现在你需要确保我们这个新的SSH2.SO模块被PHP加载。编辑你的php.ini文件(对于CLI实用程序:/etc/php5/cli/php.ini,对于Apache实用程序:/etc/php5/apache2/php.ini)
#Mi!DZ5@(v2[.D0 extension=ssh2.so
`K:Y4`6~B2a0 这应该放在“Dynamic Extensions”的下面,大约在第515行左右。PHPChina 开源社区门户EC'R iC,G
PHP支持SSH编写代码PHPChina 开源社区门户 [P-u-C]a8KX
你刚刚在PHP中启用了SSH2。那么现在应该如何利用它呢?有两个选择。SSH支持:PHPChina 开源社区门户)nuR/k#V+P8e G
1.执行方法:
.C1CL9d&VY6~:ls3v?0 这告诉你的服务器的操作系统来执行什么东西,并且通过管道传回到你的脚本。PHPChina 开源社区门户&\ G&uX|sSI
2.外壳方法:PHPChina 开源社区门户 _}:U.fGM
这种方法在操作系统中打开一个实际的外壳,这正像通过终端应用程序登录时所操作的那样。有一些路由器并没有一个完全的POSIX一致性实施过程,而是在你登录时立即运行其自身的应用程序。这时你就需要这种方法。PHPChina 开源社区门户 c,HL:|e)J.q}QqYy
下面我们分别详述之:PHPChina 开源社区门户d(wn N:e'Si/p
第一种方法:执行
rcoa&Pa*z0 你最好为下面的代码创建函数或者是一个类,不过本文仅仅起到一个为您提供基本观念的作用,所以说你可以如此开始:
不过,并非所有人知道PHP可以与SSH连接的特性以及与执行远程命令的能力,不过这方面却非常有用。由于我们可以在很多不同的方面利用PHP,因此 它有很多设置选项来控制其行为。一组庞大的可选参数能够保证您可以将 PHP用于许多不同的目的,但这同时也意味着这些参数和服务端配置的组合会带来一些安全问题。笔者一直在PHPCLI应用程序中使用SSH,笔者是从 cronjobs中使用它的,不过一开始并非十分简单,可以说颇费周折。关于安全使用Shell2函数的手册也不是十分实用,笔者进行了多次试验之后才有 了今天这篇小文章,愿您读了之后能为您配置PHP节省一点儿时间。
wj!\x{&E_+z u-e0 在这篇文章中,笔者需要假设:
P-j'`&l`B2|T$` h0 你正在运行的操作系统是Debian / Ubuntu。如果你运行的不是Debian / Ubuntu,你可能需要用你的Linux发行版本提供的数据包管理器来替换本文对应内容。PHPChina 开源社区门户Xhc5lrxFF
你运行的是PHP5.如果你运行的不是PHP5,可用PHP4代替之。PHPChina 开源社区门户A5Usi9Yzo7n
你对PHP和服务器管理有基本的了解。
}(mp ii$p l5O!^0 你已经安装了PHP。PHPChina 开源社区门户'r}bIH
先决条件
)f7boFAR/g9T(d+M0_0 安装程序包PHPChina 开源社区门户k R)F6pp4_;C
首先,让我们安装下面的程序包:
5d'_l;APp1^0 sudo aptitude updatePHPChina 开源社区门户`8mL$L}
sudo aptitude install php5-dev php5-cli php-pear buid-essential \PHPChina 开源社区门户JW4BTb
openssl-dev zlib1g-devPHPChina 开源社区门户?o$M/oWJTd7e
安装完成进入下一步。PHPChina 开源社区门户I*BeInmz
编译libssh2PHPChina 开源社区门户^D_gd1HT\
在从sourceforge网站下载了Libssh2之后,我们需要编译它,不过不要担心,你只需要按照如下的方法操作:
3NtOx&hIe5a/k0 cd /usr/srcPHPChina 开源社区门户0CL5ami|UUK5K
wget surfnet.dl.sourceforge.net/sourceforge/libssh2/libssh2-0.14.tar.gzPHPChina 开源社区门户2t&}"S$p:]`;r4\y
tar -zxvf libssh2-0.14.tar.gzPHPChina 开源社区门户8J;N%RL uCl5i$|
cd libssh2-0.14/
{ vM:v4NX0 ./configurePHPChina 开源社区门户\ fB!D5{"C
make all installPHPChina 开源社区门户5Y?,jm^
如果你想检查是否有了一个新版本,可以查看SF.NET.不过,0.14这个版本就足够了。PHPChina 开源社区门户b.Y2H3wwGi]
安装
IIZ2q R&{0 安装ssh2.so
zi#r,y4R0 下一步,我们需要将libssh和 PHPr链接起来。有一个PECL模块可以完成这个功能。我们可以使用PEAR安装它。PHPChina 开源社区门户] w;M.GJ m
pear install -f ssh2
"v"ZYI1?!|*O z0 -f参数确保SSH2被安装,即使并没有一个稳定的选择对象。你还可以使用如下的包名称:ssh2-beta来强行运行。PHPChina 开源社区门户7r P9B;ENys'zT
现在你需要确保我们这个新的SSH2.SO模块被PHP加载。编辑你的php.ini文件(对于CLI实用程序:/etc/php5/cli/php.ini,对于Apache实用程序:/etc/php5/apache2/php.ini)
#Mi!DZ5@(v2[.D0 extension=ssh2.so
`K:Y4`6~B2a0 这应该放在“Dynamic Extensions”的下面,大约在第515行左右。PHPChina 开源社区门户EC'R iC,G
PHP支持SSH编写代码PHPChina 开源社区门户 [P-u-C]a8KX
你刚刚在PHP中启用了SSH2。那么现在应该如何利用它呢?有两个选择。SSH支持:PHPChina 开源社区门户)nuR/k#V+P8e G
1.执行方法:
.C1CL9d&VY6~:ls3v?0 这告诉你的服务器的操作系统来执行什么东西,并且通过管道传回到你的脚本。PHPChina 开源社区门户&\ G&uX|sSI
2.外壳方法:PHPChina 开源社区门户 _}:U.fGM
这种方法在操作系统中打开一个实际的外壳,这正像通过终端应用程序登录时所操作的那样。有一些路由器并没有一个完全的POSIX一致性实施过程,而是在你登录时立即运行其自身的应用程序。这时你就需要这种方法。PHPChina 开源社区门户 c,HL:|e)J.q}QqYy
下面我们分别详述之:PHPChina 开源社区门户d(wn N:e'Si/p
第一种方法:执行
rcoa&Pa*z0 你最好为下面的代码创建函数或者是一个类,不过本文仅仅起到一个为您提供基本观念的作用,所以说你可以如此开始:
CODE:
if (!function_exists("ssh2_connect")) die("function ssh2_connect doesn't exist")
!f)J;_!mGmTI$@0
f5\"LBl'{{:{!G0
PHPChina 开源社区门户Y#P)jB_
PHPChina 开源社区门户S,G%ix7}
Y"U3E
// log in at server1.example.com on port 22
3fEf~TL7Xj0
PHPChina 开源社区门户E2R ^-]j/T!kF
Vn6T;`
x!}J0
f!@uiDb o0e3^0
if(!($con = ssh2_connect("server1.example.com", 22))){PHPChina 开源社区门户 m/QIY!zZ%rL
PHPChina 开源社区门户+q6U&v;]a/d^+s
PHPChina 开源社区门户0s^N?1p'l6I
PHPChina 开源社区门户"Nn3yoe"@
echo "fail: unable to establish connection\n";PHPChina 开源社区门户^T$Z/@u8Ym,N
om`#J)p9h~A_0
PHPChina 开源社区门户 g wr)Oe.R-Ac}
PHPChina 开源社区门户,Y|\lg;x3c"V:Eh
} else {
9VAos7be.aW2}0
?UM sC\)cBD0
]!H2[Rx7z{A0
PHPChina 开源社区门户
dNpF+JB p#~
// try to authenticate with username root, password secretpasswordPHPChina 开源社区门户8k kDA2`MC
pV7[8p)N+Z0
PHPChina 开源社区门户;v!|#O)RG8c*iRA3I
PHPChina 开源社区门户jm#P0Y`Hri-_
if(!ssh2_auth_password($con, "root", "secretpassword")) {PHPChina 开源社区门户
D6@z0}+}KAhO:q
PHPChina 开源社区门户*S,tJ%B~M8s[8o
PHPChina 开源社区门户cm\6XT.O g0z4w
gov$h|f*~;m7l0
echo "fail: unable to authenticate\n";
+cz;Qn2?;|.WN v0
a}&j8m+U"v+i0
PHPChina 开源社区门户 W)p W ~S
W7I0F
*J8fz/w6~N~Ka0
} else {
