openssh python包装器

openssh-wrapper的Python项目详细描述


在某些情况下,openssh ssh命令行的简单包装 公用事业似乎比帕拉米科机械更可取。

这个项目在ssh到 在远程服务器上执行命令。你只需要确保 安装openssh客户端和python解释器,然后安装 openssh包装器包。

使用示例

简单的命令执行

>>> from openssh_wrapper import SSHConnection
>>> conn = SSHConnection('localhost', login='root')
>>> ret = conn.run('whoami')
>>> print ret
command: whoami
stdout: root
stderr:
returncode: 0
>>> ret.command
'whoami'
>>> ret.stdout
'root'
>>> ret.stderr
''
>>> ret.returncode
0

如果python解释器安装在远程机器上,您还可以运行 远程的python代码。其他任何能 从stdin执行代码

>>> ret = conn.run('whoami')
>>> print conn.run('print "Hello world"', interpreter='/usr/bin/python').stdout
Hello world

另一个用户可用的run方法选项是forward ssh_agent(这个特性 帕拉米科还没有)。假设您可以访问foobar作为支持 服务器而root@localhost没有,因此您可以利用ssh代理 转发

$ eval `ssh-agent`
Agent pid 5272
$ ssh-add
Identity added: /home/me/.ssh/id_rsa (/home/,e/.ssh/id_rsa)
$ python
>>> conn = SSHConnection('localhost', login='root')
>>> print conn.run('ssh support@foobar "whoami"', forward_ssh_agent=True).stdout
support

有一个示例演示如何将文件从本地复制到 远程机器。您还可以定义目标的所有者和模式

>>> fd = open('test.txt', 'w')
>>> fd.write('Hello world')
>>> fd.close()
>>> from openssh_wrapper import SSHConnection
>>> conn = SSHConnection('localhost', login='root')
>>> conn.scp(('test.txt', ), target='/tmp', mode='0666', owner='nobody:')
>>> print conn.run('cat /tmp/test.txt').stdout
Hello world
>>> print conn.run('ls -l  /tmp/test.txt').stdout
-rw-rw-rw- 1 nobody nogroup ... /tmp/test.txt

也可以将类似文件的对象(而不是文件名)传递给scp方法。在后面 方法为您创建临时文件的场景,将它们发送到远程 然后删除已创建的所有内容:

>>> from StringIO import StringIO
>>> data = StringIO('test')
>>> from openssh_wrapper import SSHConnection
>>> conn = SSHConnection('localhost', login='root')
>>> conn.scp((data, ), target='/tmp/test.txt', mode='0644')
>>> print open('/tmp/test.txt').read()
test

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

推荐PyPI第三方库


热门话题
具有未知数量条件的java If语句   java如何在Spark中使用两个“条件”进行过滤?   雅加达ee为ColdFusion提供的最佳Java ee服务器   java如何在jersey的MessageBodyWriter方法中获取writeTo中的anotations值?   java从脚本文件调用jar文件中的函数   java在执行insert语句后,如何获得id值为的语句?   在OS X上设置OpenCV Java绑定   java使用for循环遍历数组x。以字符串形式返回x的元素,其中每个元素由一个空格分隔   ApacheiClientBuilder为Algolia Java创建的APIClient是线程安全的吗?   java在DFS/BFS算法中获取邻居时避免内存分配?   java使用AES/CBC/PKCS5P加密大文件(2GB)   允许保存/加载列布局的Java DB网格组件   队列大小为1的java Spring调度   跑步带有Java参数的exe   java正则表达式将所有“<”和“>”标记替换为“&lt;”及“&gt;”在<<![CDATA]>标签?   java何时同步变量?