zoukankan      html  css  js  c++  java
  • 使用libssh2连接到远程服务器

    libssh2-1.7.0.tar.gz 

    示例代码:libssh2-1.7.0.tar.gzlibssh2-1.7.0example 

    官网示例 

    https://www.libssh2.org/examples/ 

     libssh2 进行 SFTP 文件传输

    libssh2的官网:www.libssh2.org这里面提供了很多例子,比如FTP的,shell命令的等等,我在这里介绍一下shell命令的发送和接收返回数据。

    example里有个文件名叫exec.c 这个文件是实现shell命令的一个例子

    做windows连接linux服务器发送shell命令的主要方法有几个简单介绍下:

    1.WSAStartup(),打开socket链接库

    2.socket(),初始化一个socket套接字

    3.connect(),连接到ssh服务器

    4.libssh2_session_init(),初始化一个ssh连接

    5.libssh2_session_handshake(),将socket和session握手通信

    6.libssh2_userauth_password(),验证登陆

    7.libssh2_channel_open_session(),打开通道

    8.libssh2_channel_exec(),发送shell命令

    9.libssh2_channel_read(),读取命令处理结果


    这里的8.libssh2_channel_exec(),发送shell命令和心目中想象的不太一样,不能循环发送命令,发送第一次命令时,该命令执行,但是第二次再发送时会返回一个

    名字叫LIBSSH2_ERROR_CHANNEL_REQUEST_DENIED的ERROR,也就是说这个函数只能发送一次shell命令就不能再用了,太麻烦了。


    在这里这种需求怎么解决:

    当调用完libssh2_channel_exec()时,将通道释放掉libssh2_channel_close(),然后再重新打开libssh2_channel_open(),再使用这个libssh2_channel_exec()发送shell命令。

    但是在这里可能会出现一个问题,在libssh2_channel_open()的时候并没有把通道打开,调用libssh2_session_last_error()发现这个错误代码是LIBSSH2_ERROR_EAGAIN,在官方网站的解释是这不是一个错误,是一个阻塞的过程,也就是现在这个链接已经阻塞了,需要等等再打开。这也就是最上面那个waitsocket()的作用了。


    总结:如果不能理解,简洁直白的方式就是类似于在SSH终端敲打命令的方式

  • 相关阅读:
    (HDOJ 2503)a/b + c/d
    用VSTS进行网站压力测试
    .NET中IDisposable接口的基本使用
    创建ASP.Net自定义控件
    petshop4.0详解
    .net中SQL防注入代码
    petshop4 缓存机智在sql2005上的设置
    Asp.net自定义控件:概念
    .Net pet shop 4 和 MSMQ
    .net缓存自己总结的几条
  • 原文地址:https://www.cnblogs.com/jing1617/p/8385278.html
Copyright © 2011-2022 走看看