当前位置:  开发笔记 > 编程语言 > 正文

使用Python进行SSH的最简单方法是什么?

如何解决《使用Python进行SSH的最简单方法是什么?》经验,为你挑选了7个好方法。

如何从本地Python(3.0)脚本简单地SSH到远程服务器,提供登录/密码,执行命令并将输出打印到Python控制台?

我宁愿不使用任何大型外部库或在远程服务器上安装任何东西.



1> hughdbrown..:

如上所述,您可以使用Paramiko自行编码.或者,您可以查看Fabric,这是一个python应用程序,用于执行您询问的所有事情:

Fabric是一个Python库和命令行工具,旨在通过SSH协议简化部署应用程序或执行系统管理任务.它提供了用于运行任意shell命令(作为普通登录用户或通过sudo),上载和下载文件等的工具.

我认为这符合您的需求.它也不是一个大型库,不需要服务器安装,虽然它确实依赖于需要在客户端安装的paramiko和pycrypt.

该应用程序曾经在这里.它现在可以在这里找到.

* The official, canonical repository is git.fabfile.org
* The official Github mirror is GitHub/bitprophet/fabric

有几篇很好的文章,虽然你应该小心,因为它在过去的六个月里发生了变化:

使用Fabric部署Django

现代Python黑客的工具:Virtualenv,Fabric和Pip

使用Fabric和Virtualenv进行简单易用的部署


后来:Fabric不再需要paramiko安装:

$ pip install fabric
Downloading/unpacking fabric
  Downloading Fabric-1.4.2.tar.gz (182Kb): 182Kb downloaded
  Running setup.py egg_info for package fabric
    warning: no previously-included files matching '*' found under directory 'docs/_build'
    warning: no files found matching 'fabfile.py'
Downloading/unpacking ssh>=1.7.14 (from fabric)
  Downloading ssh-1.7.14.tar.gz (794Kb): 794Kb downloaded
  Running setup.py egg_info for package ssh
Downloading/unpacking pycrypto>=2.1,!=2.4 (from ssh>=1.7.14->fabric)
  Downloading pycrypto-2.6.tar.gz (443Kb): 443Kb downloaded
  Running setup.py egg_info for package pycrypto
Installing collected packages: fabric, ssh, pycrypto
  Running setup.py install for fabric
    warning: no previously-included files matching '*' found under directory 'docs/_build'
    warning: no files found matching 'fabfile.py'
    Installing fab script to /home/hbrown/.virtualenvs/fabric-test/bin
  Running setup.py install for ssh
  Running setup.py install for pycrypto
...
Successfully installed fabric ssh pycrypto
Cleaning up...

这主要是化妆品,但是:ssh是paramiko的一个分支,两个库的维护者是相同的(Jeff Forcier,也是Fabric的作者),维护者计划以paramiko的名义重新统一paramiko和ssh.(通过pbanka进行此修正.)



2> ThomasH..:

我没有尝试过,但是这个pysftp模块可能有所帮助,而后者又使用了paramiko.我相信一切都是客户端的.

有趣的命令可能是.execute()在远程机器上执行任意命令.(该模块还提供了更多其FTP字符的功能.get().put方法).

更新:

在我最初链接的博客文章不再可用之后,我重写了答案.现在,一些引用此答案的旧版本的评论看起来很奇怪.


您提供的链接中ssh.py文件的链接已损坏:/

3> Neil..:

如果要避免任何额外的模块,可以使用子进程模块运行

ssh [host] [command]

并捕获输出.

尝试类似的东西:

process = subprocess.Popen("ssh example.com ls", shell=True,
    stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
output,stderr = process.communicate()
status = process.poll()
print output

要处理用户名和密码,可以使用子进程与ssh进程交互,也可以在服务器上安装公钥以避免密码提示.


但是,如果客户端在Windows上呢?

4> Sebastian No..:

我为libssh2编写了Python绑定.Libssh2是一个实现SSH2协议的客户端库.

import socket
import libssh2

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('exmaple.com', 22))

session = libssh2.Session()
session.startup(sock)
session.userauth_password('john', '******')

channel = session.channel()
channel.execute('ls -l')

print channel.read(1024)


看起来很低级.例如(您自己的示例),您必须明确地说您使用IPv4或IPv6(您不必使用OpenSSH命令行客户端).另外,我没有找到如何使用ssh-agent.
关于pylibssh2的好处是它传输文件的速度比任何像sram一样的ssh的本地python实现都要快.

5> Cascabel..:

你对"最简单"的定义在这里很重要 - 简单的代码意味着使用模块(虽然"大型外部库"是夸大其词).

我相信最新(积极开发)的模块是paramiko.它下载了演示脚本,并提供详细的在线API文档.您也可以尝试PxSSH,它包含在pexpect中.在第一个链接上有一个简短的示例以及文档.

同样,就简单性而言,请注意良好的错误检测总是会使您的代码看起来更复杂,但您应该能够重用示例脚本中的大量代码,然后忘记它.



6> juanjux..:

像hughdbrown一样,我喜欢Fabric.请注意,虽然它实现了自己的声明性脚本(用于制作部署等),但它也可以作为Python模块导入并在程序中使用,而无需编写Fabric脚本.

Fabric有一个新的维护者,正在重写; 这意味着您(目前)在网上找到的大多数教程都无法使用当前版本.此外,Google仍然会将旧的Fabric页面显示为第一个结果.

有关最新文档,请查看:http://docs.fabfile.org



7> Michael Will..:

我发现paramiko有点太低级了,而且Fabric不太适合用作库,所以我把我自己的库叫做spur,使用paramiko来实现一个稍微好一点的界面:

import spur

shell = spur.SshShell(hostname="localhost", username="bob", password="password1")
result = shell.run(["echo", "-n", "hello"])
print result.output # prints hello

您还可以选择在程序运行时打印该程序的输出,如果您希望在退出之前查看长时间运行的命令的输出,这将非常有用:

result = shell.run(["echo", "-n", "hello"], stdout=sys.stdout)

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有