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

10

我已经知道 Python 中有 SSH 模块,但这不是我正在寻找的。 我想要的是一个 Python 脚本,能执行以下操作:

  1. 连接到 [由用户输入的] SSH 主机
  2. 使用 [由用户提供的] 凭据进行连接
  3. 在 SSH 主机上运行命令 [telnet 到 [由用户输入的主机]
  4. 在 telnet 会话中选择菜单项

谢谢您的帮助,

最好的祝福,


1
我不明白。你需要在Python中进行SSH相关的操作,但你对Python的SSH模块不感兴趣? - tokland
3
@Tokland,我正在寻找一个示例脚本。不要提供类似于“Fabric是用于简化SSH使用的Python库和命令行工具”的答案 :) - Ilias
7个回答


4

4
现在流行的解决方案是Fabric

2

如果您正在寻找一个可以自动化CLI交互的模块,那么这里有一个名为pexpect的模块。


1

有许多库可以做到这一点。

  1. 子进程
  2. Pexpect
  3. Paramiko(最常用)
  4. Fabric
  5. Exscript

您可以查看它们的文档以了解实现。


1
我会引导您去看:
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
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()

0
你可以使用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来加快运行速度。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接