我正尝试使用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