Как подключиться к машине Windows 2012 от Centos с помощью Python3 - PullRequest
0 голосов
/ 17 октября 2018

Мое требование - возможность удаленного запуска сценария PowerShell на сервере Windows 2012. Его необходимо запускать с сервера Linux с помощью сценария Python.

Нужны предложения по наилучшему способу обработки этого, а также примеры кода(если возможно).

Ниже приведены шаги, которые я намерен выполнить, но я вижу, что они не работают должным образом.

  1. Сценарии PowerShell, которые нужно выполнить, уже размещены на сервере Windows (2012).
  2. Программа Python3, работающая в Linux (CentOS), выполняет SSH на сервере Windows (2012) с помощью модуля netmiko.
  3. отправляет команду (команда PowerShell для выполнения сценария на удаленном сервере Windows) черезСоединение SSH.

Мне удалось подключиться к удаленному серверу Windows с помощью Python.Но я не вижу, чтобы этот метод работал должным образом.

Нужен эффективный и действенный способ добиться этого.

from netmiko import ConnectHandler

device = ConnectHandler(device_type="terminal_server",
                        ip="X.X.X.x",
                        username="username",
                        password="password")
hostname = device.find_prompt()
output = device.send_command("ipconfig")
print (hostname)
print (output)
device.disconnect()

1 Ответ

0 голосов
/ 20 октября 2018

Ничего особенного не сделано для типа устройства 'Terminal_server'. В данный момент вы должны выполнить ручную передачу.

Ниже извлечено из COMMON_ISSUES.md

Поддерживает ли Netmiko подключение через сервер терминалов?

Существует тип устройства «терминал_сервера», который практически ничего не делает после подключения по SSH. Это означает, что вам нужно вручную обрабатывать взаимодействие с сервером терминалов для подключенияк конечному устройству. После того, как вы полностью подключитесь к конечному сетевому устройству, вы можете затем «перезапустить», и Netmiko будет вести себя нормально

from __future__ import unicode_literals, print_function
import time
from netmiko import ConnectHandler, redispatch

net_connect = ConnectHandler(
    device_type='terminal_server',        # Notice 'terminal_server' here
    ip='10.10.10.10', 
    username='admin', 
    password='admin123', 
    secret='secret123')

# Manually handle interaction in the Terminal Server 
# (fictional example, but hopefully you see the pattern)
# Send Enter a Couple of Times
net_connect.write_channel("\r\n")
time.sleep(1)
net_connect.write_channel("\r\n")
time.sleep(1)
output = net_connect.read_channel()
print(output)                             # Should hopefully see the terminal server prompt

# Login to end device from terminal server
net_connect.write_channel("connect 1\r\n")
time.sleep(1)

# Manually handle the Username and Password
max_loops = 10
i = 1
while i <= max_loops:
    output = net_connect.read_channel()

    if 'Username' in output:
    net_connect.write_channel(net_connect.username + '\r\n')
    time.sleep(1)
    output = net_connect.read_channel()

    # Search for password pattern / send password
    if 'Password' in output:
    net_connect.write_channel(net_connect.password + '\r\n')
    time.sleep(.5)
    output = net_connect.read_channel()
    # Did we successfully login
    if '>' in output or '#' in output:
        break

    net_connect.write_channel('\r\n')
    time.sleep(.5)
    i += 1

# We are now logged into the end device 
# Dynamically reset the class back to the proper Netmiko class
redispatch(net_connect, device_type='cisco_ios')

# Now just do your normal Netmiko operations
new_output = net_connect.send_command("show ip int brief")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...