您可以在 bash 脚本中使用 gnome 密钥环,如果是,那么如何使用?

mYz*_*Yzk 10 bash keyrings scripts password

我正在为 Windows 共享开发一个自动挂载脚本。我已经完成了脚本并且它工作得很好,但是是否可以将 Gnome Keyring 添加到 bash 中,所以一旦用户写下他/她的密码,它就会被保存到 Gnome Keyring 中,然后从那里取出。此外,我的 Windows AD 用户密码必须每个月更改一次,是否可以制作脚本,以便每个月过去一次,然后脚本再次要求输入密码?

例子:

用户登录到 Ubuntu,挂载脚本在登录时启动。用户写入他/她的密码,脚本将其发送到 Gnome Keyring 进行保存。下次他/她将登录时,将从 Gnome Keyring 中获取密码,但如果是 6 月 1 日,则用户必须再次输入密码。

代码:

    #!/bin/bash
MOUNTDIR=Public
DIRNAME=Shares
DOMAIN=AD_Domain
SERVER=server.local.lan
SHARE=shared_folder

# 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

# if the password is empty or matches only whitespace.
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
Run Code Online (Sandbox Code Playgroud)

Nic*_*las 8

根据这个答案,您可以使用secret-tool

# store password
secret-tool store --label='MyLabel' server myserver user myuser key password

# retrieve password
secret-tool lookup server myserver user myuser key password
Run Code Online (Sandbox Code Playgroud)

  • 但是我撤回了我的评论,因为在这种情况下“密码”不是密码,而是一个属性,表示存储的“秘密”是密码。“秘密工具”总是提示(无回声)输入“秘密”,或从标准输入中读取。在显示的示例中,甚至在手册中都不清楚。 (2认同)

小智 4

在寻找同样的东西时,我遇到了这个问题,由于没有最新的答案(唯一的答案在评论中),这是我的:

看看这个。它可以轻松用于脚本编写

python -c "import keyring; print(keyring.get_password('name', 'username'))"
python -c "import keyring; keyring.set_password('name', 'username', '$PASSWORD')"
Run Code Online (Sandbox Code Playgroud)

理论上应该可以与许多密钥环守护进程一起使用。