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

  • 相关阅读:
    一次性能测试的面试问题
    一次APP测试的感悟
    《程序员跳槽全攻略》读书笔记
    如果有人让你推荐编程技术书,请叫他看这个列表
    上班的一天
    马士兵Java视频教程 —— 学习顺序
    月薪3万的技术网站资源收集
    给32岁的自己一些答案
    《Vuser虚拟用户开发》读书笔记
    shell脚本异常:/bin/sh^M:bad interpreter: No such file or directory
  • 原文地址:https://www.cnblogs.com/jing1617/p/8385278.html
Copyright © 2011-2022 走看看