簡體   English   中英

無法使用 Python Paramiko 執行重定向多行輸入的 shell 命令

[英]Cannot execute shell command with redirected multiline input using Python 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 服務器可以接受“exec”通道上的<< 'EOF' shell 構造。

但這應該有效:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM