当前位置: 首页 > 面试题库 >

您如何在Paramiko中的单个会话中执行多个命令?(python)

巩阳秋
2023-03-14
问题内容

def exec_command(self, command, bufsize=-1):
#print “Executing Command: “+command
chan = self._transport.open_session()
chan.exec_command(command)
stdin = chan.makefile(‘wb’, bufsize)
stdout = chan.makefile(‘rb’, bufsize)
stderr = chan.makefile_stderr(‘rb’, bufsize)
return stdin, stdout, stderr

在paramiko中执行命令时,在运行exec_command时它总是会重置会话。我希望能够执行sudo或su并在运行另一个exec_command时仍然具有那些特权。另一个示例是尝试exec_command(“
cd /”),然后再次运行exec_command并将其放在根目录中。我知道您可以执行类似exec_command(“ cd /; ls
-l”)的操作,但是我需要在单独的函数调用中执行此操作。


问题答案:

非交互式用例

这是一个 非交互式 示例……它发送cd tmpls然后发送exit

import sys
sys.stderr = open('/dev/null')       # Silence silly warnings from paramiko
import paramiko as pm
sys.stderr = sys.__stderr__
import os

class AllowAllKeys(pm.MissingHostKeyPolicy):
    def missing_host_key(self, client, hostname, key):
        return

HOST = '127.0.0.1'
USER = ''
PASSWORD = ''

client = pm.SSHClient()
client.load_system_host_keys()
client.load_host_keys(os.path.expanduser('~/.ssh/known_hosts'))
client.set_missing_host_key_policy(AllowAllKeys())
client.connect(HOST, username=USER, password=PASSWORD)

channel = client.invoke_shell()
stdin = channel.makefile('wb')
stdout = channel.makefile('rb')

stdin.write('''
cd tmp
ls
exit
''')
print stdout.read()

stdout.close()
stdin.close()
client.close()

交互式用例
如果您有交互式用例,那么此答案将无济于事…我个人将使用pexpectexscript用于交互式会话。



 类似资料:
  • 我正在从事一个项目,其中我打算制作一个JavaGUI应用程序,该应用程序连接到ssh服务器并在服务器上执行远程命令。我愿意使用JSch库。我的目标是制作按钮和文本字段,让用户能够轻松发送命令和获得回复。我的意思是,用户不会打开xShell并提示“grep”hi“/usr/file.txt”,而是从列表中选择路径,在文本字段中输入“hi”,然后按下grep按钮。 问题是,我找不到一个在一个会话中执行

  • 我想做这样的事情,我可以在以下代码中运行多个命令: 我如何执行多个命令? 谢了。

  • 问题内容: 我通常使用以下命令运行多个命令: 要么 但是,如果我想从一个命令行命令在后台同时运行它们呢? 不起作用。而且也没有更换用 有办法吗? 问题答案: 您究竟希望它们如何运行?如果希望它们在后台启动并按 顺序 运行,则可以执行以下操作: 另一方面,如果您希望它们在后台 并行 运行,则可以执行以下操作: 并且可以将两种技术结合起来,例如: 重击就是重击,通常有多种不同的技术可以完成相同的任务,

  • 问题内容: 我正在用Python编写一个程序,该程序必须通过SSH与物理目标进行通信,并自动将一些命令发送到该目标(用于测试)。 我首先使用Paramiko进行此操作,然后一切都非常完美,直到我必须发送几个命令,并且例如当第二个命令必须在第一个命令的上下文中执行时(例如,第一个命令执行,第二个命令是)。我不能这样做,因为每个人都开始一个新的会话。 我尝试使用带有的通道,但是与此相关的另一个问题是:

  • 我是maven的新手,我想同时执行2个java文件。我在StackOverflow中读了几篇文章,因为我对maven的了解有限,所以我不明白如何做到这一点。我在这里附加了我的pom.xml文件,我在mac终端中使用的命令行是: mvn编译执行:Java-dexec . main class = " org . parallel . parse thread 1 " 我有另一个名为ParseThre

  • 问题内容: 我想在我运行的每个bash命令之后打印日期。 这可以帮助我了解远离键盘时要执行多少命令。 我知道我能做 获取日期,但我不知道在bash上执行的每个命令之后如何甚至是否可以运行此命令。 我也会对在每个命令 之前 运行同一命令感兴趣,因此我可以知道一个命令花费了多长时间。 可能吗? 我应该编辑什么文件? 例如: 如果我也可以介绍以下功能,我将很高兴: 第一个日期是我运行程序的日期,第二个是