2011-06-20 93 views
6

如何使用PHP-SSH2检查远程SSH服务器中是否存在目录'xyz'?使用PHP SSH2检查远程目录

+2

这里http://www.php.net/manual/en/function.ssh2-exec检查手动文件夹或文件。 php – powtac

+0

和交换密钥,或者您需要提供一个用户名/密码到您的PHP脚本工作。如果您交换密钥,请考虑到如果您通过apache执行脚本,则需要使用apache用户执行此操作。 –

+0

我不是在谈论SSH连接建立。我需要检查连接后服务器中可能存在的特定目录。 – World

回答

16

您可以使用使用SFTP file_exists前缀 'ssh2.sftp://'

例如,与配合建立连接,您可以:

$sftp = ssh2_sftp($connection); 
$fileExists = file_exists('ssh2.sftp://' . $sftp . '/home/marco'); 
1

假设是一个Linux服务器

$connection = ssh2_connect('shell.example.com', 22); 
ssh2_auth_password($connection, 'username', 'password'); 
$cmd = 'if test -d "/YOUR_DIRECTORY"; then echo 1; fi'; 
$stream = ssh2_exec($connection, $cmd); 
3

我建议放弃PHP SSH2代替phpseclib, a pure PHP SSH implementation

其中,PHP SSH2的API很糟糕。私钥必须保存在要加载的文件系统上,而使用phpseclib则需要的是字符串。您可以从$ _POST获取一个密钥,而不必像libssh2所要求的那样将其转储到文件系统。最重要的是,libssh2要求你有一个单独的公钥文件,因为私钥包含公钥,所以公钥是脑死亡。

来自libssh2的ssh2_exec()也返回ANSI颜色代码,有时从不返回输出,有时会返回(它不一致)。

最后,phpseclib是just plain faster

+0

当使用私钥进行身份验证时,'phpseclib'不会更快。使用一个体面的关键强度可能会导致连接超过10秒。 '私钥包含公钥',这是错误的。这不会改变ssh不需要公钥的事实。我不喜欢ssh2有限的key-as-filepath,但它不会损害模块的安全性,并且可以使用函数轻松地打包来创建临时文件。如果你不关心速度或CPU的使用情况,'phpseclib'非常棒,但我会说作为一个广泛使用的人,'ssh2'更快,更无bug。 –

+2

几个月前phpseclib有一个更新,应该加快私钥的授权。有关详细信息,请参阅http://phpseclib.sourceforge.net/math/intro.html。 – neubert

0
<?php 
$connection = ssh2_connect('shell.example.com', 22); 
ssh2_auth_password($connection, 'username', 'password'); 

$sftp = ssh2_sftp($connection); 

$stream = file_exists("ssh2.sftp://$sftp/path/to/file"); 
?> 
0

要检查远程路径是使用PHP_SSH2

$path="/tmp"; 
$connection = ssh2_connect('shell.example.com', 22); 
ssh2_auth_password($connection, 'username', 'password'); 

$sftp = ssh2_sftp($connection); 
$isdir = is_dir("ssh2.sftp://$sftp/$path"); 
    if ($isdir ==true) { 
      echo "The Remote Folder is a Directory".PHP_EOL; 
    } 
    else { 
      $isfile = file_exists("ssh2.sftp://$sftp/$path"); 
      if ($isfile == true) { 
       echo "The Remote Path is a File".PHP_EOL; 
      } 
    }