Python 脚本 - 连接到 SSH 并运行命令

Posted

技术标签:

【中文标题】Python 脚本 - 连接到 SSH 并运行命令【英文标题】:Python script - connect to SSH and run command 【发布时间】:2011-06-21 06:33:31 【问题描述】:

我已经知道 Python 有 ssh 模块,但这不是我要找的。 我想要的是一个 python 脚本来执行以下操作:

    > 连接到 [ 用户输入 ] SSH 主机 > 使用凭据 [由用户提供] 进行连接 > 在 SSH 主机上运行命令 [ telnet to [host - input by user ]​​i> > 在 telnet 会话中选择菜单项

提前致谢,

最好的问候,

【问题讨论】:

我不明白。你需要在 Python 中做 SSH 相关的事情,而你对 Python 的 SSH 模块不感兴趣? @Tokland,我正在寻找一个示例脚本。不是为了回答,“Fabric 是一个 Python 库和命令行工具,用于简化 SSH 的使用”:) 【参考方案1】:

使用paramiko,有关使用它的完整示例,请参见http://jessenoller.com/2009/02/05/ssh-programming-with-paramiko-completely-different/。

【讨论】:

【参考方案2】:

使用paramiko 或libssh2 python bindings。

【讨论】:

【参考方案3】:

现在流行的解决方案是Fabric

【讨论】:

【参考方案4】:

如果您真的在寻找一个可以让您自动执行 CLI 交互的模块,可以使用 pexpect

【讨论】:

【参考方案5】:

有很多图书馆可以做到这一点。

    子流程 期待 Paramiko(最常用) 面料 说明

您可以查看他们的文档以了解实施情况。

【讨论】:

【参考方案6】:

您可以使用专门为此设计的vassal 包。

你只需要安装vassal并做

from vassal.terminal import Terminal
shell = Terminal(["ssh username@host", "cd scripts", "python foo1.py", "python foo2.py"])
shell.run()

这将每秒运行一次命令,您可以通过更改 sec=0.1 使其运行更快。

【讨论】:

【参考方案7】:

我会推荐你​​:

spur
import spur

shell = spur.SshShell(hostname="localhost", username="bob", password="password1", missing_host_key=spur.ssh.MissingHostKey.accept)
result = shell.run(["echo", "-n", "hello"])
print(result.output) # prints hello
paramiko 通过 SSH 执行命令登录 - video
import paramiko

hostname = 'enter_host'
username = 'enter_user'
password = 'enter_pass'

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname, username=username, password=password)

stdin, stdout, stderr = client.exec_command('cd /enter/valid/path && ls -l')

for line in stdout:
    print(line.strip('\n'))

client.close()

输出:

-rw-rw-r-- 1 username username 2712 Jan 22 14:49 file_1.ini
-rw-rw-r-- 1 username username 5928 Jan 22 14:50 file_2.log
-rw-rw-r-- 1 username username 1454 Jan 14 23:31 file_3.sql
-rw-rw-r-- 1 username username  337 Jan 14 23:31 file_4.py
drwxrwxr-x 3 username username 4096 Jan 14 23:33 folder_1
drwxrwxr-x 2 username username 4096 Jan 14 23:33 folder_2
-rw-rw-r-- 1 username username 2566 Jan 21 12:38 file_5.md
-rw-rw-r-- 1 username username   63 Jan 14 23:31 file_6.txt
drwxrwxr-x 4 username username 4096 Jan 14 23:31 folder_3
drwxrwxr-x 9 username username 4096 Jan 21 12:38 folder_4
不需要库
import subprocess

subprocess.Popen("ssh user@host cmd".format(user=user, host=host, cmd='ls -l'), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()

【讨论】:

以上是关于Python 脚本 - 连接到 SSH 并运行命令的主要内容,如果未能解决你的问题,请参考以下文章

通过 ssh 连接到远程并使用 expect 运行 git 命令

使用 SSH 命令在 python 中生成字典

如何使用 ssh 在后台运行命令并分离会话

无法通过 python 通过 SSH 连接到 postgres 服务器

shell 脚本 ssh 命令退出状态

用于从该框中通过 SSH 连接到 jumphost 和 sftp 的 Python 脚本