相关疑难解决方法(0)

如何使用Paramiko获取SSH返回码?

client = paramiko.SSHClient()
stdin, stdout, stderr = client.exec_command(command)
Run Code Online (Sandbox Code Playgroud)

有没有办法获得命令返回码?

很难解析所有stdout/stderr并知道命令是否成功完成.

python ssh paramiko

87
推荐指数
3
解决办法
6万
查看次数

在执行Python Paramiko的命令后,我如何保存结果?

如下所示,是否可以保存结果?原因,在第二和第三stdout.read()我无法达到结果.

import paramiko
import os
dssh = paramiko.SSHClient()
dssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
dssh.connect('192.168.1.250', username='root', password='pass')
import os
stdin, stdout, stderr = dssh.exec_command('ifconfig')
print stdout.read()
print ('Sleeping 2 seconds!')
os.system('sleep 2')
stdin, stdout, stderr = dssh.exec_command('ls -l')
print stdout.read()
print stdout.read()
print stdout.read()
dssh.close()
Run Code Online (Sandbox Code Playgroud)

python save paramiko

20
推荐指数
2
解决办法
4万
查看次数

paramiko SSH exec_command(shell脚本)在完成之前返回

我使用paramiko从远程Linux机器启动shell脚本.启动shell脚本并执行命令make -j8.但是exec_command在make完成之前返回.

如果我在本地计算机上启动脚本,它会正确执行.

有人能解释一下这种行为吗?

python paramiko

15
推荐指数
1
解决办法
1万
查看次数

paramiko python模块挂在stdout.read()

我使用以下代码:

import paramiko

def runSshCmd(hostname, username, password, cmd, timeout=None):          
    client = paramiko.SSHClient()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    client.connect(hostname, username=username, password=password,
            allow_agent=False, look_for_keys=False, timeout=timeout) 
    stdin, stdout, stderr = client.exec_command(cmd)
    stdin.flush()
    data = stdout.read()
    print (data)
    client.close()

runSshCmd("10.128.12.32", "root", "C0mput3Gr!d", "ts_menu")
Run Code Online (Sandbox Code Playgroud)

当谈到stdout.read()时,它会挂起......有时它会在很长时间后打印输出.

你能否建议如果能解决这个问题?

我看到这个问题已经报道:

https://bugs.python.org/issue24026

在python中是否有更好的模块用于ssh连接和运行命令?

python python-module paramiko python-3.x

10
推荐指数
2
解决办法
8356
查看次数

Paramiko频道在阅读大量输出时卡住了

我有一个代码,我在远程Linux机器上执行命令并使用Paramiko读取输出.代码def看起来像这样:

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(IPAddress, username=user['username'], password=user['password'])


chan = self.ssh.get_transport().open_session()

chan.settimeout(10800)

try:
    # Execute thecommand
    chan.exec_command(cmd)

    contents = StringIO.StringIO()

    data = chan.recv(1024)

    # Capturing data from chan buffer.
    while data:
        contents.write(data)
        data = chan.recv(1024)

except socket.timeout:
    raise socket.timeout


output = contents.getvalue()

return output,chan.recv_stderr(600),chan.recv_exit_status()
Run Code Online (Sandbox Code Playgroud)

上面的代码适用于小输出,但它适用于较大的输出.

这里有缓冲相关的问题吗?

python paramiko

9
推荐指数
2
解决办法
2万
查看次数

等到通过Python在远程计算机上完成任务

我在Ubuntu上用python编写程序.在该程序中,我尝试在连接到网络的远程计算机(RaspberryPi)上完成"删除文件"任务后打印一条消息.

但在实际操作中,打印命令不会等到远程机器上的任务完成.

任何人都可以指导我如何做到这一点?我的编码如下

import paramiko

# Connection with remote machine
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect('192.168.2.34', username='pi', password='raspberry')

filename   = 'fahad.txt'
filedelete ='rm ' + filename
stdin, stdout, stderr = client.exec_command(filedelete)
print ("File Deleted")
client.close()
Run Code Online (Sandbox Code Playgroud)

python remote-access paramiko python-2.7

9
推荐指数
2
解决办法
2万
查看次数

Paramiko连续stdout

我使用Paramiko向远程Linux服务器运行一些ssh命令.这些命令将在控制台中连续输出,我想在本地控制台窗口中打印这些所有信息.

stdin, stdout, stderr = ssh.client.exec_command("ls")
for line in stdout.read()
    print line,
ssh.client.close()
Run Code Online (Sandbox Code Playgroud)

因此,如果我编写这样的代码,所有输出信息将被发送回给我,直到命令完成执行,而我想在live中打印输出.

非常感谢.

python ssh paramiko

5
推荐指数
1
解决办法
7309
查看次数

Paramiko:从远程执行命令的标准输出读取

所以我正在使用paramiko进行一些基本的SSH测试,我没有得到任何输出到stdout.继承我的代码.

import paramiko
client=paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
com="ls ~/desktop"
client.connect('MyIPAddress',MyPortNumber, username='username', password='password')
output=""
stdin, stdout, stderr = client.exec_command(com)

print "ssh succuessful. Closing connection"
client.close()
print "Connection closed"
stdout=stdout.readlines()
print stdout
print com
for line in stdout:
    output=output+line
if output!="":
    print output
else:
    print "There was no output for this command"
Run Code Online (Sandbox Code Playgroud)

所以每当我运行它时,执行该命令(如果我执行类似cp的操作,文件被复制),但我总是得到"此命令没有输出".当打印stdout = stdout.readlines()时,[]是输出.另外,如果我在for循环中添加一个print语句,它就永远不会运行.有人可以帮帮我吗?谢谢!

python paramiko

4
推荐指数
2
解决办法
4万
查看次数

python paramiko等待完成执行命令

我在paramiko中写了这段代码:

def TryExecute(hostname='192.168.1.1', user='root', passwd='root'):
    ssh = SSHClient()
    ssh.set_missing_host_key_policy(AutoAddPolicy())
    ssh.connect(hostname, username=user, password=passwd, timeout=3)
    #stdin, stdout, stderr =  ssh.exec_command("uname -a")

    session = ssh.invoke_shell()
    session.send("\n")

    session.send("echo step 1\n")
    time.sleep(1)

    session.send("sleep 30\n")
    time.sleep(1)

    while not session.recv_ready():
        time.wait(2)

    output = session.recv(65535)

    session.send("echo step 2\n")
    time.sleep(1)

    output += session.recv(65535)
Run Code Online (Sandbox Code Playgroud)

我尝试在我的linux服务器上执行更多命令,问题是我的python代码不等待完成执行命令,例如,如果我尝试执行"sleep 30",则python不等待30秒完成执行命令,怎么解决这个问题?我试试白衣,而recv_ready()蝙蝠不等待:(

python paramiko

3
推荐指数
1
解决办法
1万
查看次数

将远程(Paramiko)ssh 命令的输出评估为成功/失败布尔值

我有一个函数来检查文件是否存在,它返回'True'/ 'False',现在我正在将它“转换”为 bool eval(),但是我认为这不是最聪明的解决方案,但我不知道该怎么做它没有不必要的ifs

>>> foo = 'False'
>>> type(eval(foo))
<class 'bool'>
>>> type(foo)
<class 'str'>
Run Code Online (Sandbox Code Playgroud)

例如,我在 ssh 连接的机器上运行这个表达式

"test -e {0} && echo True || echo False".format(self.repo)
Run Code Online (Sandbox Code Playgroud)

像这样,我的结果将是字符串。

def execute(command):
    (_, stdOut, _) = ssh.exec_command(command)
    output = stdOut.read()
    return output.decode('utf-8')
Run Code Online (Sandbox Code Playgroud)

有没有其他方法可以实现这一目标?

python ssh shell paramiko

2
推荐指数
1
解决办法
642
查看次数

使用 Python Paramiko 在不同的 SSH 服务器中并行运行多个命令

我的SSH.py目标是通过 SSH 连接到许多服务器来运行 Python 脚本 ( worker.py)。我正在使用 Paramiko,但对它非常陌生,并且不断学习。在我通过 ssh 连接的每台服务器上,我需要保持 Python 脚本运行——这是为了并行训练模型,因此脚本需要在所有机器上运行,以便联合更新模型参数/训练。服务器上的 Python 脚本需要运行,因此要么所有 SSH 连接都无法关闭,要么我必须找到一种方法,让服务器上的 Python 脚本即使关闭连接也能继续运行。

从广泛的谷歌搜索来看,您似乎可以通过nohup以下方式实现此目的:

client = paramiko.SSHClient()
client.connect(ip_address, username, password)
transport = client.get_transport()
channel = transport.open_session()
channel.exec_command("python worker.py > /logs/'command output' 2>&1")
Run Code Online (Sandbox Code Playgroud)

但是,我不清楚如何关闭/退出所有 SSH 连接?我正在运行该SSH.py文件cmd.exe,关闭该cmd.exe文件是否足以远程关闭所有进程?

此外,我的使用是否client.close()符合我的目的?请参阅下面我的代码。

# SSH.py

import paramiko
import argparse
import os

path = "path"
python_script = "worker.py"

# definitions for ssh connection and cluster
ip_list = ['XXX.XXX.XXX.XXX', XXX.XXX.XXX.XXX', XXX.XXX.XXX.XXX'] …
Run Code Online (Sandbox Code Playgroud)

python windows ssh openssh paramiko

2
推荐指数
1
解决办法
8947
查看次数