超级快速ssh库-libssh2的绑定
ssh2-python的Python项目详细描述
超级快速的ssh2协议库。ssh2-python为libssh2提供python绑定。
安装
为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
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}$ |
---|