

fabric で、遠隔のサーバにはいり、処理をしてその結果を持ち帰るにはどうするのがいいでしょうか？

やりたいことは、

１．遠隔サーバの特定のディレクトリに、特定のユーザでログインして、ローカルサーバのスクリプトを実する。  
遠隔サーバには、スクリプトを置きたくありません。

２．実行結果を、ローカルサーバに移動して、実行結果を保存するために生成したファイルを消去する。

どうしても、fabric での解決をもとめているわけではないですが、fabric だと手間かけずにできそうなきがしたのです。


CC BY-SA 3.0
2015-06-16T08:30:15.090
11404
2015-08-15T23:01:02.833
2015-07-16T13:52:35.607
3639
5922
question
python fabric
fabric で、サーバ情報収集して、その結果を取得するには、


fabricでということであれば、ローカルサーバのスクリプトをputしてリモートに配置して実行、実行結果をリモートからローカルへget、そしてリモートに置いたスクリプトを削除・・・みたいな流れでいかがでしょうか。

putとgetのサンプル fabfile.py  
<引用サイト様：<http://perezvon.hatenablog.com/entry/20091026/1256552181>>

[code]

    from fabric.api import local, put, get
    
    def put_and_get():
    local('date > /tmp/local.txt')
    put('/tmp/local.txt', '/tmp/remote.txt')
    get('/tmp/remote.txt', '/tmp/remote2.txt')
    
[/code]

どのみち`ssh`することになるので、個人的には`expect`ですとか、`sshpass`なんかもおすすめです。


CC BY-SA 3.0
2015-06-16T11:47:12.277
11416
2015-06-16T11:47:12.277
10006
11404
answer


単純にローカルのスクリプトをリモートで実行したいなら、sshを使えばいいです。

[code]

    ssh user@host 'bash -s' < local_script.sh > results.txt
    
[/code]

コマンドの引数を渡したいとか、環境変数を引き継ぎたいとかになると、もう一工夫必要でしょう。

fabricを使うなら,下のコードをfabfile.pyに保存して`fab remote:ホスト名,ローカルスクリプト名`として実行すれば動きます。

[code]

    from fabric.api import run, settings
    
    def remote(host, local_script):
        # read the local script
        with open(local_script, 'rb') as f:
            script = f.read()
        # run it on the remote host
        with settings(host_string=host):
            resp = run(script)
        # save the result into results.txt
        with open('results.txt', 'wb') as f:
            f.write(resp)
    
[/code]


CC BY-SA 3.0
2015-07-16T16:59:19.493
12427
2015-07-16T17:12:15.833
2015-07-16T17:12:15.833
7837
7837
11404
answer