當前位置: 首頁>>技術教程>>正文


如何將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/zh-tw/article/7374.html,未經允許,請勿轉載。