ファブリックが実行されるたびに、ルートパスワードが要求され、自動提案のために同じように送信できます。
fab staging test
fab -h
はすべてのオプションを表示します。それらを読むこともできます ここ 。
特に、私は引用します、
-p PASSWORD、-password = PASSWORD
Env.passwordを指定された文字列に設定します。その後、SSH接続を行うとき、またはSudoプログラムを呼び出すときに、デフォルトのパスワードとして使用されます。
パスワードについてお伺いしたことは承知しておりますが、パスワードなしでファブリック(SSHなど)を実行できるようにシステムを構成した方がよいでしょうか。
これを行うには、ローカルマシンで次のようにします。
ssh-keygen
およびすべてのデフォルトに同意する(理由がない場合は、それ以外の場合はそうする)cat ~/.ssh/id_rsa.pub
とそのキーをコピーしますリモートマシン:
mkdir ~/.ssh && chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys2 && chmod 600 ~/.ssh/authorized_keys2
authorized_keys2
に貼り付けますこれで、リモートマシンはローカルマシンを「信頼」し、パスワードなしでログインできるようになります。ハンディ。
ホストごとにパスワードを設定することもできます。それは私には自明ではなかったので、ここではこれを探している人が利用できます。
from fabric import env
env.hosts = ['user1@Host1:port1', '[email protected]']
env.passwords = {'user1@Host1:port1': 'password1', '[email protected]': 'password2'}
ファブリックは、使用されたパスワードをenv.passwords辞書にキャッシュします。完全なホスト文字列をその辞書のキーとして使用し、パスワードを値として使用して、このキャッシュを設定します。タスクを実行する前にこのディクショナリを自分で設定した場合、Fabricはそれらを要求しません。
検索からここまでくる人のために追加するために、-I
オプションを使用してfabを実行すると、デフォルトのパスワードを使用するように求められますこれにより、コマンド履歴に表示されなくなります
例:
$ fab -I my_task
Initial value for env.password:
プロセスリストにパスワードを入力せずにこれを行う1つの方法(ps auxにコマンドが表示されます)は、次のようにfabfile.pyにパスワードを入力することです。
from fabric.context_managers import env
env.password = 'PASSWORD'
リモートシステムに送信されるものの前にそれを置くと、パスワードを要求されなくなります。
connect_args
にsshパスワードを設定することも可能です
conn = Connection(
"{username}@{ip}:{port}".format(
username=username,
ip=ip,
port=port,
),
connect_kwargs={"password": password},
)
keyring モジュールを使用して、オペレーティングシステムのキーリングサービスにパスワードを安全に保存できます。パスワードは自動的に取得され、fabfile.py
で使用できます。
最初に、たとえばPython Shellを使用して、キーリングにパスワードを保存する必要があります。
>>> import keyring
>>> keyring.set_password('some-Host', 'some-user', 'passwd')
次に、それをfabfile.py
で、たとえばファブリック2で使用できます。
from fabric import task
import keyring
@task
def restart_Apache(connection):
connection.config.Sudo.password = keyring.get_password(connection.Host, 'some-user')
connection.Sudo('service Apache2 restart')