如何使用paramiko ssh对象向Windows和Linux服务器发送远程调用?

时间:2015-05-31 01:02:19

标签: python linux windows paramiko

我正在使用Python 2.7.6和Paramiko模块(在Linux服务器上)连接到Windows服务器并发送一些命令并获得输出。我有一个连接功能,它接收远程Windows服务器的IP,用户名和密码,当发生这种情况时我得到一个sshobj。我如何用它来发送远程呼叫是我的问题?

如果是本地系统,我只会说" os.system"但不确定远程呼叫。有人可以帮忙吗?

我的代码如下所示:     sys.path.append(" /家庭/ ME /代码&#34)

import libs.ssh_connect as ssh
ssh_obj = ssh.new_conn(IP, username, password)

stdin, stdout, stderr = ssh_obj.exec_command("dir") #since the remote    system I am SSHing into is Windows.

我的" new_conn"看起来像这样:

import paramiko
def new_conn(IP, username, password):
    ssh_obj = paramiko.SSHClient()
    ssh_conn.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh_conn.connect(IP, username, password), timeout=30)
    return ssh_obj

我从stdin得到的所有东西,stdout和stderror都是活跃的; 1个开放频道anhd一些信息,如ChannelFile,aes等。)。

我希望看到" dir"的输出。来自我的Linux上的Windows ..

尝试" stdout.read()"和" stdout.readlines()"但是前者出现了" stdout"后者出现了" []"!

谢谢!

2 个答案:

答案 0 :(得分:1)

您需要在cmd.exe /c之前添加dir cmd.exe /c dir,才能在Windows上远程运行命令。

坚持使用exec_command,不要尝试send / recv命令。我从来没有使用send / recv命令来使用Windows,至少使用我使用Windows(FreeSSHd)的SSH服务器。

答案 1 :(得分:1)

我在我的Windows上安装了FreeSSHd,它可以工作!

FreeSSHd教程:(中文) https://jingyan.baidu.com/article/f7ff0bfc1ebd322e27bb1344.html

代码:(Python 3)

import paramiko

hostname = "windows-hostname"
username = "windows-username"
password = "windows-password"

cmd = 'ifconfig'
try:
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(hostname,username=username,password=password)
    print("Connected to %s" % hostname)
except paramiko.AuthenticationException:
    print("Failed to connect to %s due to wrong username/password" %hostname)
    exit(1)
except Exception as e:
    print(e.message)    
    exit(2)

try:
    stdin, stdout, stderr = ssh.exec_command(cmd)
except Exception as e:
    print(e.message)

err = ''.join(stderr.readlines())
out = ''.join(stdout.readlines())
final_output = str(out)+str(err)
print(final_output)