fabric 密码

42 投票
8 回答
48363 浏览
提问于 2025-04-15 19:45

每次运行fabric的时候,它都会要求输入管理员密码。有没有办法把这个密码自动发送过去,以便于自动化操作呢?

fab staging test

8 个回答

51

你还可以为每个主机单独设置密码。这一点我之前没想到,所以我把它分享出来,方便有需要的人。

from fabric import env
env.hosts = ['user1@host1:port1', 'user2@host2.port2']
env.passwords = {'user1@host1:port1': 'password1', 'user2@host2.port2': 'password2'}

Fabric会把用过的密码存储在一个叫做env.passwords的字典里。它用完整的主机字符串作为这个字典的键,把密码作为值。如果你在执行任何任务之前自己设置好这个字典,Fabric就不会再询问你密码了。

61

我知道你问的是关于密码的事,但其实配置系统让你可以在不输入密码的情况下使用SSH(也就是远程连接)会更好。

要做到这一点,你需要在本地机器上执行以下步骤:

  1. ssh-keygen,然后一直按回车接受默认设置(如果没有特别原因的话)
  2. cat ~/.ssh/id_rsa.pub,然后复制显示的那串密钥

接下来,在远程机器上:

  1. mkdir ~/.ssh && chmod 700 ~/.ssh,这一步是创建一个文件夹并设置权限
  2. touch ~/.ssh/authorized_keys2 && chmod 600 ~/.ssh/authorized_keys2,这一步是创建一个文件并设置权限
  3. 把刚才复制的密钥粘贴到authorized_keys2文件里

从现在开始,你的远程机器就“信任”你的本地机器了,这样你就可以直接登录而不需要输入密码,真方便。

51

输入fab -h可以查看所有可用的选项,你也可以在这里阅读相关内容。

特别是,我引用一下:

-p PASSWORD, --password=PASSWORD

这个选项会把你输入的密码设置为环境变量中的密码;这样在进行SSH连接或者调用sudo程序时,就会默认使用这个密码。

撰写回答