Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从PHP中读取预登录ssh横幅_Php_Ssh_Stream - Fatal编程技术网

从PHP中读取预登录ssh横幅

从PHP中读取预登录ssh横幅,php,ssh,stream,Php,Ssh,Stream,我试图使用libssh2 php库函数从php连接到ssh服务器。这很好,但我不知道如何在PHP中阅读预登录横幅。Pre-login横幅是SSH提示登录之前显示的文本,据我所知,我无法从连接对象获取流 既然有了这段代码,有没有办法在登录之前进行读取 <?php if (!function_exists("ssh2_connect")) die("function ssh2_connect doesn't exist"); // log in at server1.example

我试图使用libssh2 php库函数从php连接到ssh服务器。这很好,但我不知道如何在PHP中阅读预登录横幅。Pre-login横幅是SSH提示登录之前显示的文本,据我所知,我无法从连接对象获取流

既然有了这段代码,有没有办法在登录之前进行读取

<?php
if (!function_exists("ssh2_connect")) die("function ssh2_connect doesn't exist");
      // log in at server1.example.com on port 22 
if(!($con = ssh2_connect("server1.example.com", 22))){
  echo "fail: unable to establish connection\n";
} else {

 //####### Would really like to get a stream right here to read pre-login banner

// try to authenticate with username root, password secretpassword
if(!ssh2_auth_password($con, "root", "secretpassword")) {
    echo "fail: unable to authenticate\n";
} else {
    // allright, we're in!
    echo "okay: logged in...\n";

    // execute a command
    if (!($stream = ssh2_exec($con, "ls -al" ))) {
        echo "fail: unable to execute command\n";
    } else {
        // collect returning data from command
        stream_set_blocking($stream, true);
        $data = "";
        while ($buf = fread($stream,4096)) {
            $data .= $buf;
        }
        fclose($stream);
    }
 }
}
?>
更新(讨论后):

目前,我认为在php中除了自己实现它之外,没有其他方法可以做到这一点。向ssh2扩展的开发人员发送特性请求可能是最好的开始方式


原始(愚蠢)答案: 登录横幅将在登录更新后出现(讨论后):

目前,我认为在php中除了自己实现它之外,没有其他方法可以做到这一点。向ssh2扩展的开发人员发送特性请求可能是最好的开始方式


原始(愚蠢)答案: 登录横幅将出现在登录后

您可以使用它来执行此操作。横幅应该可以通过执行
$ssh->getLastError()
(返回字符串)或
$ssh->getErrors()
(返回字符串数组)来获得

引用其来源:

// see http://tools.ietf.org/html/rfc4252#section-5.4; only called when the encryption has been activated and when we haven't already logged in
if (($this->bitmap & NET_SSH2_MASK_CONSTRUCTOR) && !($this->bitmap & NET_SSH2_MASK_LOGIN) && ord($payload[0]) == NET_SSH2_MSG_USERAUTH_BANNER) {
    $this->_string_shift($payload, 1);
    extract(unpack('Nlength', $this->_string_shift($payload, 4)));
    $this->errors[] = 'SSH_MSG_USERAUTH_BANNER: ' . utf8_decode($this->_string_shift($payload, $length));
    $payload = $this->_get_binary_packet();
}
你可以用它来做这件事。横幅应该可以通过执行
$ssh->getLastError()
(返回字符串)或
$ssh->getErrors()
(返回字符串数组)来获得

引用其来源:

// see http://tools.ietf.org/html/rfc4252#section-5.4; only called when the encryption has been activated and when we haven't already logged in
if (($this->bitmap & NET_SSH2_MASK_CONSTRUCTOR) && !($this->bitmap & NET_SSH2_MASK_LOGIN) && ord($payload[0]) == NET_SSH2_MSG_USERAUTH_BANNER) {
    $this->_string_shift($payload, 1);
    extract(unpack('Nlength', $this->_string_shift($payload, 4)));
    $this->errors[] = 'SSH_MSG_USERAUTH_BANNER: ' . utf8_decode($this->_string_shift($payload, $length));
    $payload = $this->_get_binary_packet();
}

是的,登录后会出现登录横幅。我对获取预登录横幅感兴趣。正如您在本例中所看到的,sshd可以选择在身份验证之前显示一些文本。如果启用了此功能,我想阅读它。想想看,如果我想的话,我还想知道如何从登录提示中捕获实际文本。好的,我明白了。我会调查你的问题。听起来很有趣!:)谢谢你花时间在这上面。我确实联系了sourceforge上的作者,请求添加此功能。经过进一步研究,我在这个SourceForge项目中发现了一个SSH2协议的纯PHP实现:它似乎提供了较低级别的访问。该死!我早该告诉你的。我知道这个词。我以为你对它不感兴趣。然而,现在你知道你自己了!它应该很有效。但是我没有用它做过一些小的功能测试。是的,登录横幅会在登录后出现。我对获取预登录横幅感兴趣。正如您在本例中所看到的,sshd可以选择在身份验证之前显示一些文本。如果启用了此功能,我想阅读它。想想看,如果我想的话,我还想知道如何从登录提示中捕获实际文本。好的,我明白了。我会调查你的问题。听起来很有趣!:)谢谢你花时间在这上面。我确实联系了sourceforge上的作者,请求添加此功能。经过进一步研究,我在这个SourceForge项目中发现了一个SSH2协议的纯PHP实现:它似乎提供了较低级别的访问。该死!我早该告诉你的。我知道这个词。我以为你对它不感兴趣。然而,现在你知道你自己了!它应该很有效。但是我没有用它做过一些小的功能测试。谢谢!我昨晚大部分时间都在阅读RFC和该库的源代码。这是一个很棒的图书馆,但有一个问题。Opensshd 4.3要求身份验证方法为“无”,以显示登录横幅。这实际上是sshd中的一个bug,已经修复了,但我仍然坚持使用4.3。我的下一个任务是看看是否可以让这个库轻松地将身份验证方法从密码更改为无。谢谢你的帮助!谢谢我昨晚大部分时间都在阅读RFC和该库的源代码。这是一个很棒的图书馆,但有一个问题。Opensshd 4.3要求身份验证方法为“无”,以显示登录横幅。这实际上是sshd中的一个bug,已经修复了,但我仍然坚持使用4.3。我的下一个任务是看看是否可以让这个库轻松地将身份验证方法从密码更改为无。谢谢你的帮助!