Python 结构主机与密码和密钥文件名结合使用

Python 结构主机与密码和密钥文件名结合使用,python,fabric,Python,Fabric,使用织物版本。我有两个用户root和abcroot用户需要ssh密钥,另一个用户需要密码才能登录同一主机: from fabric.api import * def production(): env.hosts = ['root@host', 'abc@host'] env.passwords = {'abc@host': 'pass'} env.key_filename = 'key.pem' # for root user @hosts('root@host'

使用织物版本。我有两个用户
root
abc
root
用户需要ssh密钥,另一个用户需要密码才能登录同一主机:

from fabric.api import *

def production():
    env.hosts = ['root@host', 'abc@host']
    env.passwords = {'abc@host': 'pass'}
    env.key_filename = 'key.pem' # for root user


@hosts('root@host')
def test():
    run('id') # works

@hosts('abc@host')
def test2():
    # env.key_filename = [] # tried this no luck
    # env.no_keys = True # tried this no luck
    # env.use_ssh_config = False # tried this no luck
    run('id') # <------- asks password for user abc, why?
从fabric.api导入*
def生产()
env.hosts=['root@host', 'abc@host']
env.passwords={'abc@host“:”通过“}
env.key_filename='key.pem'#对于根用户
@主持人('root@host')
def test():
运行('id')#工作
@主持人('abc@host')
def test2():
#env.key_filename=[]#尝试了这个没有运气
#env.no_keys=True#尝试了这个,运气不好
#env.use_ssh_config=False#尝试了这个没有运气

运行('id')#如果要通过enviroment dict指定密码,则必须指定包含端口号的完整主机字符串。在您的情况下:
env.passwords={'abc@host:22':'pass'}

文档建议使用SSH密钥<代码>环境密码
和<代码>环境密码用作内存缓存以方便使用。我不确定他们是否会被这样虐待。