超级快速ssh库-libssh2的绑定

ssh2-python的Python项目详细描述


超级快速的ssh2协议库。ssh2-pythonlibssh2提供python绑定。

LicenseLatest Versionhttps://travis-ci.org/ParallelSSH/ssh2-python.svg?branch=masterhttps://ci.appveyor.com/api/projects/status/github/parallelssh/ssh2-python?svg=true&branch=masterhttps://img.shields.io/pypi/wheel/ssh2-python.svghttps://img.shields.io/pypi/pyversions/ssh2-python.svgLatest documentation

安装

为Linux、OSX和Windows以及所有Python版本提供了二进制轮包。轮包具有无依赖关系

pip可能需要更新才能安装二进制控制盘包-pip install -U pip

pip install ssh2-python

Conda是另一个安装选项-有关详细说明,请参见documentation

对于源代码安装说明,包括根据系统提供的libssh2,see documentation生成。

要为centos/redhat、ubuntu、debian和fedora创建本机系统包,请参见instructions in the documentation

API功能集

此时,所有的libssh2api都已实现到版本1.8.2

各种操作的完整示例脚本可以在examples directory中找到。

此外,由于ssh2-python是具有python语义的libssh2的薄包装,因此its code examples可以直接移植到python,只需很少的更改。

库功能

库使用基于Cython的本机代码扩展作为libssh2的包装器。

扩展功能:

  • 线程安全-尽可能释放gil
  • 非常低的开销
  • 由于使用了优秀的C库和大量使用本机代码,因此速度非常快
  • 面向对象-当对象被python垃圾收集时,自动安全地释放内存
  • 在适用的情况下使用python语义,例如上下文管理器和迭代器支持打开和读取sftp文件句柄
  • 作为python异常引发错误
  • 提供对libssh2错误代码定义的访问

快速启动

字节和Unicode字符串都可以接受为参数并进行适当的编码。若要更改默认编码,utf-8,请更改ssh2.utils.ENCODING的值。输出总是以字节字符串为单位。

请参见Complete Example以获取包含socket connect的示例。

请使用问题跟踪程序报告代码问题,或使用mail group进行讨论和提问。

最欢迎投稿!

认证方法

连接并获取可用的身份验证方法。

from__future__importprint_functionfromssh2.sessionimportSessionsock=<createandconnectsocket>session=Session()session.handshake(sock)print(session.userauth_list())

输出将根据ssh服务器配置而变化。例如:

['publickey','password','keyboard-interactive']

代理身份验证

session.agent_auth(user)

命令执行

channel=session.open_session()channel.execute('echo Hello')

读数输出

size,data=channel.read()while(size>0):print(data)size,data=channel.read()
Hello
< H3>退出代码< EH3>
print("Exit status: %s"%(channel.get_exit_status()))
Exitstatus:0

公钥认证

session.userauth_publickey_fromfile(username,'private_key_file')

密码短语可以与passphrase关键字参数一起提供-请参见API documentation

密码验证

session.userauth_password(username,'<my password>')

SFTP读取

fromssh2.sftpimportLIBSSH2_FXF_READ,LIBSSH2_SFTP_S_IRUSRsftp=session.sftp_init()withsftp.open(<remotefiletoread>,LIBSSH2_FXF_READ,LIBSSH2_SFTP_S_IRUSR)asremote_fh, \
        open(<localfiletowrite>,'wb')aslocal_fh:forsize,datainremote_fh:local_fh.write(data)

完整示例

一个简单的用法示例看起来非常类似于libssh2usage examples

有关更完整的示例脚本,请参见examples directory

如前所述,ssh2-python故意是libssh2上的薄包装,并直接映射其大部分api。

使用这个库的客户机可以比直接与libssh2api接口简单得多。

from__future__importprint_functionimportosimportsocketfromssh2.sessionimportSessionhost='localhost'user=os.getlogin()sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)sock.connect((host,22))session=Session()session.handshake(sock)session.agent_auth(user)channel=session.open_session()channel.execute('echo me; exit 2')size,data=channel.read()whilesize>0:print(data)size,data=channel.read()channel.close()print("Exit status: %s"%channel.get_exit_status())
Output:

me

Exit status: 2

当前实现的ssh功能

  • ssh通道操作(exec、shell、subsystem)和方法
  • ssh代理功能
  • 公钥身份验证和管理
  • SFTP操作
  • sftp文件句柄和属性
  • ssh端口转发和隧道
  • 非阻塞模式
  • SCP发送和接收
  • 端口转发侦听器
  • 子系统支持
  • 主机密钥检查和操作

以及更多,根据libssh2功能。

与其他python的比较sh库

与paramiko相比,上述示例的性能更好。

time python examples/example_echo.py
time python examples/paramiko_comparison.py
Output:

^{tt1}$:

^{pr 15}$

^{tt17}$:

^{pr 16}$

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Intellij通过方法中的包查找用法   java中VS代码和打包命名的问题   将java CMS功能集成到具有高度动态内容的网站(Lucene/Mysql/Nosql)的策略   oracle的java类强制转换异常。jdbc。驾驶员OracleConnection   字节码向JVM添加上指令   如何在抽象类中执行java方法?   java是否可以在apache访问日志中排除指定的GET参数?(作者:W7开发环境)   java如何获取已安装音频播放器的列表?   尝试向HS学生展示如何使用Java访问MS数据库   使用正则表达式java对给定行中的特定字符串进行计数   java JOOQ Select查询中的Select计数   方法Java,如何从二维双精度数组中找到特定值?   获取图像URL的java正则表达式   java在切换到新的窗口驱动程序后找不到元素