python - 无法使用 Python Paramiko 执行带有重定向多行输入的 shell 命令

标签 python shell unix ssh paramiko

我正在使用 Paramiko 对盒子进行标准 SSH,运行命令,并将 STDOUT 显示到我的终端。由于 sudo 规则,我使用我的用户名 SSH 到计算机并运行 sudo /bin/su -s /bin/bash - <diff user account> 。在我的脚本中,我将以下命令传递给 Paramiko,但 STDOUT 未显示在我的屏幕上。我相信这是因为sudo命令正在打开一个新 shell,Paramiko 正在监视新 shell 上的 STDOUT。

当我登录到盒子并查看命令历史记录时,命令会运行。如何获取正在运行的命令的 STDOUT 以显示在终端上?

import paramiko

def sshCommand(hostname, port, username, command, key_filename='/home/<my username>/.ssh/id_rsa'):
        sshClient = paramiko.SSHClient()
        sshClient.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        sshClient.connect(hostname=hostname, port=port, username=username, key_filename=key_filename)
        stdin, stdout, stderr = sshClient.exec_command(command, get_pty=False)
        output = stdout.readlines()
        print(output)

sshCommand('<servername>', 22, '<my username>', """sudo /bin/su -s /bin/bash - <diff username> << \'EOF\'
echo "Hello World"
EOF
""")

最佳答案

我不认为 OpenSSH SSH 服务器可以接受 << 'EOF' “exec” channel 上的 shell 构造。

但这应该有效:

echo echo "Hello World" | sudo /bin/su -s /bin/bash - <diff username>

关于python - 无法使用 Python Paramiko 执行带有重定向多行输入的 shell 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59326497/

相关文章:

python - Tensorflow 返回相同的预测

python - Dash/plotly,仅显示直方图中的前 10 个值

shell - 具有不同文件扩展名的ffmpeg图像concat文件

shell - MongoDB 添加额外的嵌入文档而不是覆盖它

c - 用于测试、报告或调试的 GLib/GObject 拦截错误/结构代码

python - Django媒体文件路径不正确,缺少目录

linux - 比较两个文件并将其传递给另一个文件 shell bash

mysql - 如何使用二进制文件在Unix环境下安装和运行MySQL?

c - 使用 fgets 达到 EOF

python - 获取 pyswip 包的版本号