在bash挂载脚本中使用Python gnome密码库
我不太确定标题是否正确,如果不对请帮我修改一下。
现在我的问题是,我有一个用bash写的自动挂载脚本,它在用户登录时运行,并要求用户输入AD(活动目录)凭证来挂载Windows共享。
#!/bin/bash
MOUNTDIR=
DIRNAME=
DOMAIN=
SERVER=
SHARE=
# create mountpoint for mounting
if [ ! -d ${HOME}/${DIRNAME} ]; then
mkdir ${HOME}/${DIRNAME}
fi
## define a function that launched the zenity username dialog
get_username(){
zenity --entry --width=300 --title="Mount $MOUNTDIR" --text="Username:"
}
# define a function that launched the zenity password dialog
get_password(){
zenity --entry --width=300 --title="Mount $MOUNTDIR" --text="Password:" --hide-text
}
# attempt to get the username and exit if cancel was pressed.
wUsername=$(get_username) || exit
# if the username is empty or matches only whitespace.
while [ "$(expr match "$wUsername" '.')" -lt "1" ]; do
zenity --error --title="Error in username!" --text="Please check your username! Username field can not be empty!" || exit
wUsername=$(get_username) || exit
done
wPassword=$(get_password) || exit
while [ "$(expr match "$wPassword" '.')" -lt "1" ]; do
zenity --error --title="Error in password!" --text="Please check your password! Password field can not be empty!" || exit
wPassword=$(get_password) || exit
done
# mount windows share to mountpoint
sudo mount -t cifs //$SERVER/$SHARE ${HOME}/${DIRNAME} -o username=${wUsername},password=${wPassword},domain=${DOMAIN}
# show if mounting was OK or failed
if [ $? -eq 0 ]; then
zenity --info --title="Mounting public share succeeded!" --text="Location Documents/Shares/public!"
else
zenity --error --title="Mounting public did not succed!" --text="Please contact system administrator!"
fi
我最近在看一个博客,叫做用Python弯曲Gnome密钥环,里面对gnome密钥环的解释非常清楚。不过因为我从来没有用过Python,也不知道怎么把Python加到bash里,所以也许这里有人能教我怎么把gnome密钥环导入到bash中,这样就能保存用户的用户名和密码,这样当脚本再次运行时,就可以直接从gnome密钥环中获取这些信息。
谢谢!如果你需要更多信息,请留言!
1 个回答
0
嗯,这个指南有点啰嗦,而且对你来说,学习Python似乎没必要。你可以试试gnome-keyring-query(这个你需要自己编译)。
用户名可以通过命令行选项获取,或者你可以保持提示,也可以用$USER
作为默认值。
首先,把密码添加到密钥环中:
echo -n "$wPassword" |gnome-keyring-query set WindowsAD
unset wPassword # do not keep this in memory any longer than necessary
gnome-keyring-query技术上允许你直接输入密码,但它会把你按ENTER键时的换行符也存储进去,所以会出错。
要读取密码:
wUsername="$USER"
wPassword="$(gnome-keyring-query get WindowsAD)"
sudo mount ...
unset wPassword
从安全的角度来看,我不太喜欢在命令行中看到密码;任何查看完整进程列表的人(比如用ps auxww
命令)都能看到它。不过,我能想到的唯一替代方案是使用/etc/fstab.d
(用一个只有root用户可以读取的文件,甚至可以在挂载后删除它)。但这可能对你来说太麻烦了(或者你可能在一个不支持这个的系统上)。