如何在 Paramiko 的单个会话中执行多个命令? (Python)
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") 的操作,但我需要在单独的函数调用中执行此操作。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
非交互式用例
这是一个非交互式示例...它发送
cd tmp
、ls
,然后exit.
交互式用例
如果您有交互式 ssh 用例,
paramiko
可以处理它...我个人会使用scrapli
驱动交互式 ssh 会话。列出我能想到的交互使用
paramiko
的所有方法:paramiko
我可能错过了一些使用
的库paramiko
,但应该清楚paramiko
被控制 ssh 会话的 python 库广泛使用。Non-Interactive use cases
This is a non-interactive example... it sends
cd tmp
,ls
and thenexit
.Interactive use cases
If you have an interactive ssh use case,
paramiko
can handle it... I personally would drive interactive ssh sessions withscrapli
.Listing all the ways I can think of to use
paramiko
interactively:paramiko
interactivelyI might have missed some libraries that use
paramiko
, but it should be clear thatparamiko
is used quite extensively by python libraries that control ssh sessions.尝试创建一个由
\n
字符分隔的命令字符串。这对我有用。为了。例如 ssh.exec_command("command_1 \n command_2 \n command_3")
Try creating a command string separated by
\n
character. It worked for me.For. e.g.
ssh.exec_command("command_1 \n command_2 \n command_3")
严格来说,你不能。根据 ssh 规范:
这意味着,一旦执行命令,会话就结束。您不能在一个会话中执行多个命令。然而,您可以做的是启动一个远程 shell(== 一个命令),并通过 stdin 等与该 shell 交互...(考虑执行 python 脚本与运行交互式解释器)
Strictly speaking, you can't. According to the ssh spec:
This means that, once the command has executed, the session is finished. You cannot execute multiple commands in one session. What you CAN do, however, is starting a remote shell (== one command), and interact with that shell through stdin etc... (think of executing a python script vs. running the interactive interpreter)
您可以通过在客户端上调用 shell 并发送命令来完成此操作。请参阅此处
该页面有 python 3.5 的代码。我对代码进行了一些修改以适用于 pythin 2.7。此处添加代码以供参考
You can do that by invoking shell on the client and sending commands. Please refer here
The page has code for python 3.5. I have modified the code a bit to work for pythin 2.7. Adding code here for reference
您可以使用以下技术运行多个命令。使用分号分隔 Linux 命令
例如:
You can run multiple command using the below technique. Use semicolon to separate the Linux commands
Eg:
如果您希望每个命令都对下一个命令产生影响,您应该使用:
但在某些情况下,我发现当“;”时不起作用,使用“&&”确实有效。
If you wish each command to have an effect on the next command you should use:
but in some cases, I found that when ";" doesn't work, using "&&" does work.
您可以执行整个 BASH 脚本文件以便更好地使用,代码如下:
这将在远程
192.168.1.101
Linux 计算机上执行本地script.sh
文件。script.sh
(只是一个例子):本教程详细解释了这一点:如何使用 Python 在远程计算机中执行 BASH 命令。
You can execute an entire BASH script file for better use, here is the code for that:
This will execute the local
script.sh
file on the remote192.168.1.101
Linux machine.script.sh
(just an example):This tutorial explains this in detail: How to Execute BASH Commands in a Remote Machine in Python.