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】:我会推荐你:
spurimport 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 命令