Estoy tratando de usar Fabric (v1.3.4) para aprovisionar instancias de Karaf en varios servidores. Karaf implementa un servidor SSH. Entonces, tengo 2 daemons ssh corriendo en el mismo servidor; uno en el puerto 22 y otro en 8101. Usando el método fabric.tasks.execute() de Fabric, puedo conectarme a un host host: port.¿Cómo uso Fabric to SSH en dos puertos diferentes en el mismo servidor?
El problema es que mi sesión inicial es secuestrada por el usuario nombrado de la segunda conexión debido a un aparente secuestro de env.user.
Aquí está un ejemplo simplificado 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("[email protected]" + host + ":8101")
execute(secondSSH, hosts=executeHosts)
run("echo first again")
def secondSSH():
run("echo second", shell=False, pty=False)
Ambos servidores SSH están en el mismo servidor, con en dos puertos diferentes y permitiendo que dos usuarios diferentes. Aquí está la salida:
~/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
[[email protected]:8101] Executing task 'secondSSH'
[[email protected]:8101] run: echo second
[[email protected]:8101] Login password:
[[email protected]:8101] out: second
[[email protected]:8101] run: echo first again
Done.
Disconnecting from 192.168.5.250:8101... done.
Disconnecting from [email protected] done.
Nota cómo la "eco primera vez" se ejecuta como el usuario que se especificó notmmaley estrictamente para anfitriones del comando de ejecución(). Lo que quiero (necesito) es que el comando execute() se produzca como usuario con nombre para el usuario especificado @ host: puerto y luego me devuelva el usuario original para las tareas restantes. ¿Es esto posible con Fabric/execute() y/o dónde me he equivocado?
Gracias por el enlace a esa referencia de error. He estado en contacto con bitprophet y se confirmó que este comportamiento se debió a una función prevista. Parece que la solución podría proporcionar una solución, que intentaré. Gracias también por la sugerencia sobre cómo ajustar el código. Soy nuevo en Python, ¡así que esto es bastante útil! – mmaley