Fabric 1.6.0 (paramiko 1.10.1) を実行しています。次のスクリプトがあります。
from fabric.api import env, output, run, sudo
user='your-user'
host='your-server'
port='your-port'
command = 'ps -ef'
output['running'] = False # Avoid fabric to output what it is doing behind the scenes
output['stdout'] = False # Do not show stdout
output['stderr'] = False # Do not show stderr
output['status'] = False # Prevent fabric from using print in some situations (at least in disconnect_all)
output['warnings'] = False # Avoid fabric from showing messages about failed commands
def run_it(command, user, host, port, keyfile):
env.host_string = "%s@%s:%s" % (user, host, port)
env.key_filename = keyfile
try:
res = run(command, pty=False, shell=True)
print "SUCCESS: return_code=%s" % (return_code)
except Exception, e:
print "ERROR : %s" % (e)
stdout, return_code = None, None
return stdout, return_code
run_it(command, user, host, port, '/bad/keyfile')
run_it(command, user, host, port, '/home/gonvaled/.ssh/id_rsa')
run_it(command, user, host, port, '/bad/keyfile')
これは以下を出力します:
ERROR : [Errno 2] No such file or directory: '/bad/keyfile'
SUCCESS: return_code=0
SUCCESS: return_code=0
しかし、私は期待しました:
ERROR : [Errno 2] No such file or directory: '/bad/keyfile'
SUCCESS: return_code=0
ERROR : [Errno 2] No such file or directory: '/bad/keyfile'
なぜこうなった?良いキーファイルが記憶されているようですか?なんで?キーファイルをその場で設定できないことが示されているため、これは面倒です。そのため、どちらが使用されているかわかりません。最初に設定したものと、2番目に設定したものですか? それを選ぶ基準は?いくつ覚えられますか?...
fabric を ssh ライブラリ (fabfiles ではなく) として使用しているため、異なるパラメーターで呼び出しています。env
これらのパラメーターをファブリックに渡すために に依存しています。これはほとんど正常に機能していkey_filename
ますが、例外のようです。