Я пытаюсь использовать 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 () и / или где я ошибся?