我正在使用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"后者出现了" []"!
谢谢!
答案 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)