2014-12-27 91 views
1

所以我想結合兩個bash腳本的好的部分。我需要獲取由成功的PAM會話創建的環境變量,並將它們傳遞給MySQL語句。搶bash變量輸入數據到MySQL

通過打破過程分解成部分解決的辦法,我可以先從其工作,其本身下面的代碼片斷,但它不是整個包,遠離使用變量:

#!/bin/bash 
mysql -h localhost -u user -ppassword << EOF 
insert into database.table (PAM_RHOST,PAM_SERVICE,PAM_TTY) values ('1','2','3'); 
EOF 

好吧,上面實際上是將數據插入MySQL數據庫。到目前爲止,故障排除非常好。所以我的最終目標是將類似上面的代碼與下面的代碼片段結合起來使用,但是不需要發送電子郵件,我需要腳本來完成上面的腳本,即獲取環境變量並將數據輸入到MySQL中。用於發送電子郵件的原始腳本是:

#!/bin/bash 
adminEmail="[email protected]" 
[ "$PAM_TYPE" == "open_session" ] || exit 0 
{ 
echo "User: $PAM_USER" 
echo "Remote Host: $PAM_RHOST" 
echo "Service: $PAM_SERVICE" 
echo "TTY: $PAM_TTY" 
echo "Date: `date`" 
echo "Server: `hostname -s`" 
} | mail -s "`hostname -s` $PAM_SERVICE login: $PAM_USER" $adminEmail 

所以我試圖做的是將一些片粘合在一起,這是行不通的。我想出了以下和需要幫助的位置:

#!/bin/bash 
[ "$PAM_TYPE" == "open_session" ] || exit 0 
{ 
echo "User: $PAM_USER" 
echo "Remote Host: $PAM_RHOST" 
echo "Service: $PAM_SERVICE" 
echo "TTY: $PAM_TTY" 
echo "Date: `date`" 
echo "Server: `hostname -s`" 
} 
mysql -h localhost -u user -ppassword << EOF 
insert into database.table (PAM_USER,PAM_RHOST,PAM_SERVICE,PAM_TTY) values '$PAM_USER','$PAM_RHOST','$PAM_SERVICE,$PAM_TTY'); 
EOF 

回答

2

你的SQL語句的values條款中有一些語法錯誤。

values ('$PAM_USER','$PAM_RHOST','$PAM_SERVICE','$PAM_TTY'); 
    ^         ^^ 
0

Oooops。你是對的。我已經修改了現在可以使用的腳本,並將其放在了可能需要腳本的其他腳本下面。我現在唯一關心的是給腳本消毒:1)腳本駐留在任何公開可用的目錄之外,2)我擔心有人可以通過連接傳遞變量,所以我想知道什麼是好消毒或防止這一點。因此,這是可以工作的腳本:

#!/bin/bash 
if [ "$PAM_TYPE" == "open_session" ] 

then 

mysql -h localhost -u user -ppassword << EOF 
insert into database.table (PAM_USER,PAM_RHOST,PAM_SERVICE,PAM_TTY,SERVER) values ('$PAM_USER','$PAM_RHOST','$PAM_SERVICE','$PAM_TTY',"`hostname -s`"); 
EOF 

fi