【问题标题】:Shell script without using sudo in ubuntu在 ubuntu 中不使用 sudo 的 Shell 脚本
【发布时间】:2015-02-21 19:31:49
【问题描述】:

对 shell 脚本完全陌生,我有一个脚本可以执行以下命令,以便从 Vagrant 导出我的数据库:

export_folder="/var/www/projects/DatabaseBackup/local"

schema="wp"

tables="wp_8_options"

export_data="mysqldump -uroot -pmy-secret-password --opt $schema $tables > $file_name.sql"

sudo vagrant ssh --command "cd $export_folder && $export_data"

$export_folder : 是 Vagrant 内部的路径,对应于我的主机文件夹

$scema : 要从 Vagrant mySql 服务器导出的数据库

$tables : 要从所选架构导出的表

$export_data : 导出数据的实际mysqldump命令

sudo vagrant ssh --command "..." : 指示 Vagrant 使用 SSH 以在 Vagrant VM 中执行另一个命令的命令

上面的所有代码都是从 shell 脚本运行的,直到现在它都能正常工作。我编写此脚本的原因是,当我使用Git 钩子在Git 上提交某些内容时,自动导出数据库。

上述脚本的问题是我无法通过Git 挂钩运行它,因为它使用的是sudo

不幸的是,Vagrant 在我的计算机上需要sudo 才能运行。另外,您应该知道,我不是Vagrant 专家,而Vagrant 是由另一个同事安装在我的计算机上的,所以我不知道如何修改它以便在没有sudo 的情况下运行。

此外,我并不真正关心此脚本的安全性,因为它只会在我的计算机内部运行。

所以问题是,如何在不使用sudo 命令的情况下运行此脚本。有哪些选择?

【问题讨论】:

  • 为什么 Vagrant 需要sudo?我在 Ubuntu 上使用它,它在没有 sudo 的情况下工作。您是否以某种奇怪的方式安装它?或者可能最初将 Vagrant VM 创建为 root
  • 我真的不知道!! :) 我还没有安装它。它是由另一个同事安装的。我对 Vagrant 完全陌生。我知道的唯一想法是总是需要 sudo 来运行任何东西。我使用 sudo 进行 vagrant up、vagrant halt、vagrant ssh、....
  • 可能存在一个使用“Vagrant”的组。这只是一个假设,我刚刚检查了 Vagrant 是什么,看起来像一个虚拟机(对吗?)。如果有流浪者团体,请与cat /etc/group 联系。如果是这样,请将您的用户添加到组中。
  • 不,不存在。唯一存在的是vboxusers:x:126:,它可能是用于 VirtualBox

标签: linux git shell ubuntu vagrant


【解决方案1】:

无需密码即可授权sudo vagrant

您的 /etc/sudoers 文件必须包含该行

#includedir /etc/sudoers.d

必须使用visudo命令来编辑/etc/sudoers -- 不要手动编辑它。

然后,sudo visudo -f /etc/sudoers.d/<username> 并添加到该文件中

<username> <hostname> = NOPASSWD: /usr/bin/vagrant

【讨论】:

  • 这是一种解决方法,而不是解决方案。找出 Vagrant 的问题并解决问题可能仍然是个好主意,而不是症状。