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终端敲打命令的方式

  • 相关阅读:
    解决win10家庭版打不开组策略gpedit.msc
    Centos7上安装配置Redis
    Typora配置图片自动上传到图床
    SSM静态资源访问不了问题
    SSM整合
    opencv基础学习 小知识--绘图+小实战训练
    opencv基础学习详细笔记【1】--读取并显示图片
    Scikit-Learn 源码研读 (第二期)基类的实现细节
    Scikit-Learn 源码研读 (第一期)项目结构介绍
    在Win10上搭建fastai课程环境
  • 原文地址:https://www.cnblogs.com/jing1617/p/8385278.html
Copyright © 2011-2022 走看看