Как я могу использовать Fabric для SSH к двум разным портам на одном сервере? - PullRequest
7 голосов
/ 16 февраля 2012

Я пытаюсь использовать Fabric (v1.3.4) для предоставления экземпляров Karaf на различных серверах. Караф реализует сервер SSH. Итак, у меня есть 2 демона SSH, работающих на одном сервере; один на порту 22 и один на 8101. Используя метод fabric.tasks.execute () Fabric, я могу подключиться к альтернативному узлу host: port.

Проблема в том, что мой начальный сеанс перехватывается именованным пользователем второго соединения из-за явного взлома env.user.

Вот упрощенный пример fabfile.py:

from fabric.api import env, run
from fabric.tasks import execute

env.hosts = ['192.168.5.250']

def firstSSH():
        run("echo first")
        executeHosts = []
        for host in env.hosts:
                executeHosts.append("notmmaley@" + host + ":8101")
        execute(secondSSH, hosts=executeHosts)
        run("echo first again")

def secondSSH():
    run("echo second", shell=False, pty=False)

Оба SSH-сервера находятся на одном сервере с двумя разными портами и позволяют использовать двух разных пользователей. Вот вывод:

~/fabric$ fab firstSSH
[192.168.5.250] Executing task 'firstSSH'
[192.168.5.250] run: echo first
[192.168.5.250] Login password:
[192.168.5.250] out: first

[notmmaley@192.168.5.250:8101] Executing task 'secondSSH'
[notmmaley@192.168.5.250:8101] run: echo second
[notmmaley@192.168.5.250:8101] Login password:
[notmmaley@192.168.5.250:8101] out: second

[notmmaley@192.168.5.250:8101] run: echo first again

Done.
Disconnecting from 192.168.5.250:8101... done.
Disconnecting from mmaley@192.168.5.250... done.

Обратите внимание, как «echo first again» выполняется как пользователь notmmaley, который был указан строго для хостов команды execute (). То, что я хочу (нужно), чтобы команда execute () выполнялась как именованный пользователь для указанного user @ host: port , а затем возвращала мне исходного пользователя для оставшихся задач. Возможно ли это с Fabric / execute () и / или где я ошибся?

1 Ответ

5 голосов
/ 17 апреля 2012

Я считаю, что эта проблема решена в Ошибка 568 , которая исправлена ​​в Fabric 1.4.1+.Вы должны обновить до последней версии и посмотреть, если это решает вашу проблему.С другой стороны, вам лучше обойтись, если вы сделаете это для манипуляции с хостом:

execute(secondSSH, hosts=["notmmaley@%s:8101" % h for h in env.hosts])

Поскольку вы не делаете никаких переменных или просто заполняете их циклами.

...