私はFabric(v1.3.4)を使用して、さまざまなサーバーでKarafインスタンスをプロビジョニングしようとしています。 KarafはSSHサーバーを実装しています。だから、私は2つのsshデーモンが同じサーバー上で動いている。 1つはポート22に、もう1つは8101にあります。Fabricのfabric.tasks.execute()メソッドを使用して、別のホスト:ポートに接続できます。Fabric to SSHを同じサーバ上の2つの異なるポートに使用するにはどうすればよいですか?
問題は、私の最初のセッションが、env.userの明らかなハイジャックのために、2番目の接続の指定ユーザーによってハイジャックされることです。ここで
は、簡略化さ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)
2つの異なるポート上の2人の異なるユーザーを可能にして両SSHサーバは、同じサーバー上にあります。 「再び第1のエコー」方法
~/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ユーザとして実行される:ここで出力されます。私が欲しいのは、指定されたuser @ host:portのnamedユーザーとしてexecute()コマンドを実行し、残りのタスクについて元のユーザーを私に返すことです。これはFabric/execute()で可能ですか、どこで間違っていますか?
このバグリファレンスへのリンクありがとうございます。私はbitprophetと連絡を取り合っており、この動作は意図された機能によるものであったことが再掲されました。修正プログラムが解決策を提供するかもしれないように見えますが、これを試してみます。コードを強化する方法の提案にも感謝します。私はPythonを初めて使うので、これはとても役に立ちます! – mmaley