我正嘗試使用Fabric(v1.3.4)在各種服務器上配置Karaf實例。 Karaf實現一個SSH服務器。所以,我有兩個ssh守護進程在同一臺服務器上運行;一個在端口22上,另一個在8101上。使用Fabric的fabric.tasks.execute()方法,我可以連接到另一個主機:端口。如何使用Fabric將SSH連接到同一臺服務器上的兩個不同端口?
問題是,由於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("[email protected]" + 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
[[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.
注意如何「再次回聲第一」爲這是嚴格地指定了執行()命令的主機notmmaley用戶被執行。我想(需要)執行()命令以指定的用戶@主機:端口以指定用戶身份發生,然後將原始用戶返回給我以執行其餘任務。這可能與Fabric/execute()和/或我哪裏出錯了?
感謝您提供該錯誤參考的鏈接。我一直與bitprophet聯繫,重申這種行爲是由於一個預期的特性。它看起來像修復可能提供的解決方案,我會嘗試。也感謝關於如何加強代碼的建議。我是Python的新手,所以這非常有幫助! – mmaley 2012-04-29 21:10:09