Fabric 运行 bash 要求输入 sudo 密码的脚本 - 如何发送此密码

Fabric runs bash script that ask for sudo password - How to send this password

我想使用 fabric 在远程机器上部署一些应用程序。为此,我使用 fabric 从 VCS(bitbucket 或 github)检索 bash 脚本并执行它。但是,我的脚本的第一步是将当前用户添加到 sudoers,所以我需要输入密码。

是否可以在 fab 文件或 fab 命令中发送此密码或...?

部分代码:

bash

sudo tee /etc/sudoers.d/$USER <<END
END
file=/usr/share/MyCompagny/mybashscript.sh
sudo touch $file
sudo echo 'blablabla' >> $file
sudo /bin/rm /etc/sudoers.d/$USER
sudo -k

fabfile

def deploy():
    env.hosts = ['192.168.100.160']
    source_folder = '/home/username/src'
    branch = 'dev'
    puts('Pulling changes from branch <{}>'.format(branch))
    projects = ['data', 'report']
    for project in projects:
        current_path = os.path.join(source_folder, 'package.{}'.format(project))
        with cd(current_path):
            puts('Current path: {}'.format(current_path))
            # Discard all pending changes
            run('git checkout -- .')
            # Checkout the right branch
            run('git checkout {}'.format(branch))
            # Pull changes
            run('git pull origin_ssh {}'.format(branch))
    puts('Install with bash script')
    with cd(source_folder):
        run('./mybashscript.sh')

使用 fabric 的“sudo”函数代替“运行”函数。脚本不会提示输入密码,因为它将是 运行 sudo 权限。

def deploy():
   env.hosts = ['192.168.100.160']
   source_folder = '/home/username/src'
   branch = 'dev'
   puts('Pulling changes from branch <{}>'.format(branch))
   projects = ['data', 'report']
   for project in projects:
      current_path = os.path.join(source_folder, 'package.{}'.format(project))
      with cd(current_path):
         puts('Current path: {}'.format(current_path))
         # Discard all pending changes
         sudo('git checkout -- .')
         # Checkout the right branch
         sudo('git checkout {}'.format(branch))
         # Pull changes
         sudo('git pull origin_ssh {}'.format(branch))
      puts('Install with bash script')
      with cd(source_folder):
         sudo('./mybashscript.sh')

希望对您有所帮助!!