如何从本地 Python (3.0) 脚本简单地通过 SSH 连接到远程服务器、提供登录名/密码、执行命令并将输出打印到 Python 控制台?
我宁愿不使用任何大型外部库或在远程服务器上安装任何东西。
原文由 Christopher Tokar 发布,翻译遵循 CC BY-SA 4.0 许可协议
如何从本地 Python (3.0) 脚本简单地通过 SSH 连接到远程服务器、提供登录名/密码、执行命令并将输出打印到 Python 控制台?
我宁愿不使用任何大型外部库或在远程服务器上安装任何东西。
原文由 Christopher Tokar 发布,翻译遵循 CC BY-SA 4.0 许可协议
如上所述,您可以使用 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
有几篇关于它的好文章,但你应该小心,因为它在过去六个月中发生了变化:
现代 Python 黑客的工具:Virtualenv、Fabric 和 Pip
后来: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 进行此更正。)
原文由 hughdbrown 发布,翻译遵循 CC BY-SA 3.0 许可协议
7 回答5.3k 阅读
4 回答4.4k 阅读✓ 已解决
4 回答4k 阅读
4 回答3.8k 阅读✓ 已解决
2 回答5.9k 阅读✓ 已解决
1 回答3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
我还没有尝试过,但是这个 pysftp 模块可能会有所帮助,它反过来使用 paramiko。我相信一切都是客户端。
有趣的命令可能是
.execute()
它在远程机器上执行任意命令。 (该模块还具有.get()
和.put
方法,这些方法更多地暗示了它的 FTP 字符)。更新:
在我最初链接到的博客文章不再可用后,我重新编写了答案。一些引用此答案旧版本的评论现在看起来很奇怪。