4

ファブリックとパスワードに関していくつか質問があるようです。-I を fabric に渡すと、入力したパスワードが環境変数「password」に渡​​されることがわかっています。問題は、リモート サーバーで別のリモート サーバーに対して ssh コマンドを実行するときに、パスワードの入力を求められることです。

しかし、パスワードの入力を求められたくありません。何をしようとしても促されます。コードの一部を次に示します。

elif "test" in run('hostname -d'):
                print(blue("Gathering Knife info"))
                run("ssh mychefserver knife node show `hostname`.test.dmz")

パスワードを入力すると問題なく動作します。問題は、パスワードを入力する必要がないことです。おそらくこれは、別の ssh 接続がリモート ホストで開始され、ファブリックがそれに対して何もできないためです。

スクリプトをリモート ホストから切断し、ローカルで ssh コマンドを実行してから、リモート ホストに再接続してスクリプトを終了することもできますが、それはばかげているようです。提案?

ゲットパス情報:

Python 2.6.6 (r266:84292, Sep 11 2012, 08:34:23) 
[GCC 4.4.6 20120305 (Red Hat 4.4.6-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from getpass import getpass
>>> getpass('test: ')
test: 
'This is a test'
4

3 に答える 3

0

これが私がやった方法です。要するに: を設定fabric.api.env.passwordすると、ファブリックはそれを使用して にリストされているサーバーに接続しますenv.hosts

from getpass import getpass
from fabric.api import env

# Setting env.hosts
env.hosts = ['someuser@someserver.com']

def deploy():
    """A deployment script"""
    # Setting env.password with `getpass`
    # See here for more: http://fabric.readthedocs.org/en/1.8/usage/env.html#password
    env.password = getpass('Enter the password for %s: ' % env.hosts[0])
    # The rest of the script follows...
于 2013-10-22T14:19:54.477 に答える
-1

パスワードを入力したくない場合は、認証用のキーペアを設定できます。ssh-keygen を使用して公開鍵と秘密鍵を生成し、公開鍵をリモート マシンに置き、秘密鍵を認証メカニズムとして使用します ( https://en.wikipedia.org/wiki/Ssh-keygen )。

于 2013-05-13T19:03:09.527 に答える