【问题标题】:connect to a server via sftp php通过 sftp php 连接到服务器
【发布时间】:2011-05-21 13:15:01
【问题描述】:

我们如何通过 sftp 连接到远程服务器以验证登录详细信息在 php 中是否有效...

我正在使用apache服务器...我的用途是检查用户输入的登录详细信息是否正确。

【问题讨论】:

  • 听说过apache和http吗?
  • na...不完全是... curl、fsock、ftp 函数等都可以
  • sftp 的登录凭证是否有任何原因不起作用?

标签: php curl ftp sftp fsockopen


【解决方案1】:

您是否安装了 apache 服务器?例如:xampp?

如果你这样做了,那么你已经使用了 FTP 功能:

<?php
$connection = ssh2_connect('ftp.server.com', 22); //port 22 for Shell connections
ssh2_auth_password($connection, 'username', 'password');

$shell_ftp = ssh2_sftp($connection);

$connectionStream = fopen('ssh2.sftp://'.$shell_ftp.'/path/to/fileorfolder', 'r');

if(!connectionStream)
{
    echo "Could not connect to the server, please try agian";
}
else
{
    echo "Successfully logged in.";
}
?>

基本的 Shell FTP 连接,你必须定义文件或文件夹的绝对路径。

【讨论】:

  • 这比我的回答好。
  • 你怎么知道连接是否成功...不会是任何文件操作...只需要验证用户名和密码...
  • 我不需要这一行 $connectionStream = fopen('ssh2.sftp://'.$shell_ftp.'/path/to/fileorfolder', 'r') 也用于测试 I' m 使用端口号为 2275 的服务器。这会是个问题。导致错误启动 SSH 连接时出错(-1):发送横幅失败
  • 好吧,如果你想检查登录是否有效。那么您将需要该行来检查 $connectStream 是打开还是关闭,最好使用端口 22 作为 shell。
【解决方案2】:

使用phpseclib, a pure PHP SFTP client 可能会更轻松。这是一个例子:

<?php
include('Net/SFTP.php');

$sftp = new Net_SFTP('www.domain.tld');
if (!$sftp->login('username', 'password')) {
    exit('Login Failed');
}

echo $sftp->pwd() . "\r\n";
$sftp->put('filename.ext', 'hello, world!');
print_r($sftp->nlist());
?>

正如大家所推荐的,libssh2 的问题在于它的部署不是很广泛,它的 API 并不是最可靠的,它不可靠,支持很差等等。

【讨论】:

    【解决方案3】:

    这会有帮助吗?

    <?php
    $connection = ssh2_connect('ftp.server.com', 22); 
    if (ssh2_auth_password($connection, 'username', 'password')) 
        echo "Authentication success";
    else 
        echo "Authentication failure";
    ?>
    

    【讨论】:

      【解决方案4】:

      我从多个建议中形成了一个小库。我鼓励

      idct sftp client on GitHub

      【讨论】: