2014-12-27 128 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