当前位置: 首页>>技术教程>>正文


如何将bash脚本中的密码传递给aptitude以安装mysql?

, , , ,

问题描述

我正在编写一个简单的bash脚本,以便在Ubuntu上安装MySQL。

#!/bin/bash
apt-get update

# Install MySQL5 
aptitude -y install mysql-server mysql-client libmysqlclient15-dev

但是,MySQL会提示您输入密码和确认。如何传递root密码。我可以使用回声吗?

 

最佳解决方法

这很容易..

install mysql on ubuntu without password prompt

sudo debconf-set-selections <<< 'mysql-server-5.1 mysql-server/root_password password your_password'
sudo debconf-set-selections <<< 'mysql-server-5.1 mysql-server/root_password_again password your_password'
sudo apt-get -y install mysql-server

如果您的 shell 不支持here-strings(zsh,ksh93和bash支持它们),请使用:

echo ... | sudo debconf-set-selections 

 

次佳解决方法

谢谢您对小费的期望。我通过搜索Ubuntu管理论坛找不到任何东西,所以我满怀期待。如您所见,本文的时间戳记使我花了3个小时才开始工作。这是代码,希望它可以对某人有所帮助:

#!/bin/bash
apt-get update
apt-get install expect

VAR=$(expect -c '
spawn apt-get -y install mysql-server
expect "New password for the MySQL \"root\" user:"
send "PasswordHere\r"
expect "Repeat password for the MySQL \"root\" user:"
send "PasswordHere\r"
expect eof
')

echo "$VAR"

apt-get -y install mysql-client libmysqlclient15-dev   

#For some reason important to restart - otherwise possible errors

/etc/init.d/mysql stop
/etc/init.d/mysql start

 

第三种解决方法

这是我的新服务器安装脚本的摘录。除密码外,您应该可以复制它word-for-word。

如果您还不是root用户,则需要使用sudo运行它。

#!/bin/bash
export DEBIAN_FRONTEND=noninteractive
apt-get -q -y install mysql-server
echo "Give mysql server time to start up before we try to set a password..."
sleep 5
mysql -uroot -e <<EOSQL "UPDATE mysql.user SET Password=PASSWORD('yourpasswordhere') WHERE User='root'; FLUSH PRIVILEGES;"
EOSQL
echo "Done setting mysql password."

其他答案使用了-y,这使得apt-get始终对问题回答是。 -q隐藏一些进度指示器,因此您可以将输出发送到日志。您还可以使用-qq,它会自动为您提供-y。这是在apt-get的手册页中。

<<EOSQL是bash heredoc语法,以提高可读性。

我从这个人那里得到了此解决方案的Heredoc部分:http://padwasabimasala.posterous.com/non-interactive-scripted-mysql-install-on-ubu

Heredoc要记住的一点是,在结束字符串之前,空格将其中断。因此,请勿缩进该行。这是有关heredoc语法的页面:http://tldp.org/LDP/abs/html/here-docs.html

 

第四种方法

最简单的方法是使用DEBIAN_FRONTEND环境变量以及aptitude -q和-y标志:

sudo DEBIAN_FRONTEND=noninteractive aptitude install -q -y mysql-server

或更笼统地说,假设已经为some-how提供了sudo密码:

#!/bin/bash
INSTALLER_LOG=/var/log/my-installer.log

installnoninteractive(){
  sudo bash -c "DEBIAN_FRONTEND=noninteractive aptitude install -q -y $* >> $INSTALLER_LOG"
}

installnoninteractive mysql-server

 

第五种方法

以超级用户身份启动时,此脚本成功:

#!/bin/bash

export temp_mysql_password="**********"
export DEBIAN_FRONTEND=noninteractive 

debconf-set-selections <<< "mysql-server mysql-server/root_password password $temp_mysql_password"
debconf-set-selections <<< "mysql-server mysql-server/root_password_again password $temp_mysql_password"
debconf-set-selections <<< "mysql-server-5.6 mysql-server/root_password password $temp_mysql_password"
debconf-set-selections <<< "mysql-server-5.6 mysql-server/root_password_again password $temp_mysql_password"

apt-get update
apt-get -y upgrade
apt-get -y install mysql-server

 

第六种方法

调查使用expect

它可以用于自动执行大多数交互式会话,尽管我不会使用root密码

参考资料

 

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/7374.html,未经允许,请勿转载。