Sto provando a utilizzare Fabric (v1.3.4) per eseguire il provisioning delle istanze di Karaf su vari server. Karaf implementa un server SSH. Quindi, ho 2 demoni ssh in esecuzione sullo stesso server; uno sulla porta 22 e uno su 8101. Utilizzando il metodo fabric.tasks.execute() di Fabric, posso collegarmi a un host alternativo: port.Come utilizzare Fabric su SSH su due porte differenti sullo stesso server?
Il problema è che la mia sessione iniziale viene dirottata dall'utente chiamato della seconda connessione a causa di un apparente dirottamento di env.user.
Ecco un esempio semplificato 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)
Entrambi SSH server sono sullo stesso server, con due porte diverse e consentendo due diversi utenti. Ecco l'output:
~/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]2.168.5.250:8101] out: second
[[email protected]:8101] run: echo first again
Done.
Disconnecting from 192.168.5.250:8101... done.
Disconnecting from [email protected] done.
Si noti come il "echo ancora prima" viene eseguito come utente notmmaley che è stato specificato rigorosamente per gli host del comando execute(). Quello che voglio (necessario) è che il comando execute() si verifichi come utente con nome per l'utente specificato : porta e quindi restituisca l'utente originale a me per le attività rimanenti. Questo è possibile con Fabric/execute() e/o dove ho sbagliato?
Grazie per il collegamento a tale riferimento. Sono stato in contatto con bitprophet ed è stato ribadito che questo comportamento era dovuto a una funzione prevista. Sembra che la correzione possa fornire una soluzione, che proverò. Grazie anche per il suggerimento su come stringere il codice. Sono nuovo di Python, quindi questo è abbastanza utile! – mmaley