正しく思い出せば、FabricAPIに自分のやりたいことを実行させることもできませんでした。余分なレイヤーを完全に放棄し、Paramiko(Fabricで使用される基盤となるSSHライブラリ)を直接使用することにしました。
import os
import paramiko
ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.load_host_keys(os.path.expanduser('~/.ssh/known_hosts'))
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('hostname.example.com', 22, 'username', 'password')
ssh.save_host_keys(os.path.expanduser('~/.ssh/known_hosts'))
stdin, stdout, stderr = ssh.exec_command('uname -s')
print stdout.read()
さらにいくつかの手順が必要ですが、この方法で行うと、subprocess
別のPythonインスタンスを起動したり、Fabric APIを理解したりするのではなく、SSHレイヤーを直接活用できます。このようにParamikoを使用するWebとコンソールの両方のプロジェクトがいくつかありますが、それほど問題はありません。
Paramikoは広範囲にわたって文書化されています。