【问题标题】:fabric keeps asking for password using SSH connectionFabric 不断使用 SSH 连接询问密码
【发布时间】:2013-03-20 11:10:39
【问题描述】:

我正在尝试使用fabric 连接到一个windows azure 实例,但是尽管我配置了ssh 连接来执行命令,fabric 仍然要求输入密码。

这是我的织物文件:

def azure1():
    env.hosts = ['host.cloudapp.net:60770']
    env.user = 'adminuser'
    env.key_filename = './azure.key'

def what_is_my_name():
    run('whoami')

我运行它:

fab -f fabfile.py azure1  what_is_my_name

fab -k -f fabfile.py -i azure.key -H adminuser@host.cloudapp.net:60770 -p password what_is_my_name

但没有任何效果,尽管我输入正确,它仍然要求输入用户密码。

Executing task 'what_is_my_name'
run: whoami
Login password for 'adminuser': 
Login password for 'adminuser': 
Login password for 'adminuser': 
Login password for 'adminuser': 

如果我尝试直接使用 ssh 连接,它会完美运行。

ssh -i azure.key -p 60770 adminuser@host.cloudapp.net

我已经尝试过其他问题 (q1 q2 q3) 中给出的建议,但没有任何效果。

知道我做错了什么吗?

谢谢

【问题讨论】:

    标签: azure openssl fabric paramiko openssh


    【解决方案1】:

    最后我发现问题出在公私钥对的生成上。

    我按照windows azure guide 中提供的步骤操作,那里的密钥是使用 openssl 生成的,因此该过程会生成一个存储在 pem 文件中的公钥,您必须在创建过程中将其上传到您的实例。

    问题是得到的这个私钥没有被paramiko正确识别,所以fabric就不行了。如果您尝试使用 python 解释器中的 paramiko 打开 ssh 连接:

    >>> import paramiko, os
    >>> paramiko.common.logging.basicConfig(level=paramiko.common.DEBUG)
    >>> ssh = paramiko.SSHClient()
    >>> ssh.load_host_keys('private_key_file.key') # private key file generated using openssl
    >>> ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    >>> ssh.connect("web1.cloudapp.net",port=56317)
    

    给我错误:

    DEBUG:paramiko.transport:Trying SSH agent key a9d8dd41609191ebeedbe8df768ad8c9
    DEBUG:paramiko.transport:userauth is OK
    INFO:paramiko.transport:Authentication (publickey) failed.
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File ".. /paramiko/client.py", line 337, in connect
        self._auth(username, password, pkey, key_filenames, allow_agent, look_for_keys)
      File ".. /paramiko/client.py", line 528, in _auth
        raise saved_exception
    paramiko.PasswordRequiredException: Private key file is encrypted
    

    当密钥文件未加密时。

    为了解决这个问题,我使用 openssh 创建了密钥对,然后将公钥转换为 pem 以将其上传到 azure:

    # Create key with openssh
    ssh-keygen -t rsa -b 2048 -f private_key_file.key
    
    # extract public key and store as x.509 pem format
    openssl req -x509 -days 365 -new -key private_key_file.key -out public_key_file.pem
    
    # upload public_key_file.pem file during instance creation
    
    # check connection to instance
    ssh -i private_key_file.key -p 63534 adminweb@host.cloudapp.net 
    

    这解决了问题。

    【讨论】:

      【解决方案2】:

      要调试结构的 ssh 连接,请将这些行添加到您的 fabfile:

      import paramiko, os
      paramiko.common.logging.basicConfig(level=paramiko.common.DEBUG) 
      

      这将打印 paramiko 的所有调试消息。 Paramiko 是 fabric 使用的 ssh 库。

      请注意since Fabric 1.4 您必须使用 ssh 配置专门启用:

      env.use_ssh_config = True
      

      (注意:我非常确定绝对确定我的 fabfile 过去可以在没有此选项的情况下使用 Fabric > 1.5,但现在我升级到 1.10 后就不行了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-12-12
        • 1970-01-01
        • 2012-04-19
        • 2014-11-20
        • 2019-02-26
        • 1970-01-01
        • 2019-04-30
        相关资源
        最近更新 更多