@Penb69

Удаленный запуск скрипта?

Есть машина на debian, и некое кол-во машин на windows. Все они находятся в одной локальной сети. Нужно запустить код на линуксовой машине, что бы он уже отправил запросы на windows машины, к примеру ping 8.8.8.8

Суть вопроса в том, какие есть методы в питоне, либо может уже есть готовые решения.

UPD: мне кажется вопрос был не совсем верно понят.dd2c2308b0f340c6a4890a8994753298.bmp
  • Вопрос задан
  • 1170 просмотров
Пригласить эксперта
Ответы на вопрос 4
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Запустите микросервис на питоне, например на flask, cyclone.io или на aiohttp. Любым методом обращаетесь к нему по http через curl, браузер или любым другим методом.
Ответ написан
Комментировать
chupasaurus
@chupasaurus
Сею рефлекторное, злое, временное
Ansible. Можно запихнуть что надо на машину с линуксом, можно импортировать библиотеки и гонять из своего скрипта.
Ответ написан
Комментировать
@tetafro
Запустить удалённое выполнение можно так
ssh -i /home/username/.ssh/my_key -t 'ping 8.8.8.8' remote_user@server.com


Если надо именно внутри Питона, то проще всего через Popen() запустить эту команду и оттуда читать вывод.

Но вообще, выше про Ansible написали - лучше им пользоваться для таких задач.
Ответ написан
Комментировать
@misant
SysAdOps
Есть отдельный модуль paramiko, позволяет выполнять удаленный код по ssh внутри питон программы
Например так:
import paramiko
from paramiko import SSHClient, AutoAddPolicy

def open_ssh_session(ip, password="", user="root"):
    """Open SSH connection using password or key to ip"""
    flag = 1
    # Add key if not exist
    ssh.set_missing_host_key_policy(AutoAddPolicy())
    print "\n", datetime.datetime.now(), "Connecting.. " + ip
    try:
        ssh.connect(hostname=ip, username=user, password=password, timeout=5)
        print datetime.datetime.now(), "%s connected" % ip
    except paramiko.AuthenticationException:
        print datetime.datetime.now(), "Authentication into %s FAILED" % ip
        flag = 0
    except paramiko.SSHException:
        print datetime.datetime.now(), "%s Negotiation FAILED" % ip
        flag = 0
    except socket.error:
        print datetime.datetime.now(), "Host %s is UNREACHABLE" % ip
        flag = 0
    except socket.timeout:
        print datetime.datetime.now(), "Connecting to host %s TIMEDOUT" % ip
        flag = 0
    if ssh.get_transport():
        ssh.get_transport().window_size = 3 * 1024 * 1024
    else:
        print datetime.datetime.now(), "%s SSH connection FAILED" % ip
    return flag


def close_ssh_session():
    """Close SSH connection"""
    ssh.close()
    print datetime.datetime.now(), "SSH connection closed"
    return

def ssh_cmd_exec(cmd):
    """Executes command on remote host and returns output as ssh_out"""
    try:
        stdin, stdout, stderr = ssh.exec_command(cmd, timeout=15)
        ssh_out = stdout.read() + stderr.read()
    except paramiko.SSHException:
        print datetime.datetime.now(), 'Executing "%s" FAILED' % cmd
        ssh_out = ""
    except socket.timeout:
        print datetime.datetime.now(), 'Executing "%s" TIMEDOUT' % cmd
        ssh_out = ""

    return ssh_out

open_ssh_session('127.0.0.1', 'some_pass')
print ssh_cmd_exec('df -h')
close_ssh_session()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы