bash mount脚本中的Python gnome密钥环

时间:2014-05-21 05:55:06

标签: python linux bash

我不确定标题是否正确,如果没有请编辑。

现在我的问题是我有一个用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 Keyring 的博客,它非常好地解释了gnome密钥环。但是因为我从未在python中编码并且从未将bthon添加到bash,所以也许这里有人可以告诉我如何将gnome密钥环导入bash以便它保存用户用户名密码所以一旦重新运行脚本,它就会从gnome密钥环中获取信息。

谢谢。如果您需要更多信息,请发表评论!

1 个答案:

答案 0 :(得分: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可以读取的文件,甚至可以在安装后删除它)。这对你来说可能太麻烦了(或者你可能在一个不支持它的系统上)。