【发布时间】:2015-07-22 07:26:27
【问题描述】:
我有许多测试服务器。这些测试服务器经常被重新镜像,并且在重新镜像后它们具有相同的用户帐户和密码。我想编写一个 python 脚本,在其中一台服务器上通过 ssh 远程运行命令,而不提示用户输入密码,并收集命令的输出。在某些情况下,我想运行一个命令,获取输出,分析输出。在其他情况下,我想一次运行多个命令(可能运行一个脚本文件)。我阅读了许多关于使用第三方软件包远程运行命令的帖子(例如paramiko)。有没有推荐的方法来完成这个任务而不使用额外的包?运行我的脚本的服务器可能没有安装包。
或者我应该使用pexpect 吗?
理想情况下,我想使用subprocess 并捕获输出(提供密码作为参数)。当然,我的脚本必须处理客户端第一次登录的情况,并提示将 ssh 密钥添加到.ssh/knownhosts 文件。
谢谢你, 艾哈迈德。
【问题讨论】:
-
我认为使用命令行工具dsh是你想要的
-
这有点基于意见。我尝试了
paramiko,这是对 Python 的一个很好的 ssh 支持。但是,它真的很慢(我的情况和你一样,在 40 个不同的帐户或服务器上运行 100 个命令)。 Paramiko 很容易独立安装(它只需要python-dev包)。没试过 pexpect。 -
当我制作我的程序时,我没有找到任何在没有任何额外库的情况下运行 ssh 命令的好方法(除了使用
subprocess对ssh命令进行系统调用,这不是解决方案)。 -
您可以使用fabric、paramiko(较低级别)或子流程。你需要在你的机器上输入密码还是你的机器上有你的 ssh 密钥?
-
使用附加包有什么问题?这是您遇到的限制还是只是想知道?我会去
pexpect我发现这种情况非常方便,但我想这真的是个人喜好。
标签: python python-3.x ssh