Você pode usar o chaveiro gnome no script bash, se sim, então como?

5

Estou desenvolvendo um script de montagem automatizado para compartilhamentos do Windows. Eu terminei o script e ele funciona muito bem, mas é possível adicionar o Gnome Keyring ao bash, então, uma vez que o usuário escreve a senha, ele será salvo no Gnome Keyring e depois será extraído de lá. Além disso, minhas senhas de usuários do Windows AD precisam ser alteradas a cada mês e é possível fazer com que o script seja feito uma vez por mês e, em seguida, o script solicita a senha novamente?

Exemplo:

O usuário efetua login no Ubuntu e o script de montagem começa no login. O usuário escreve sua senha e o script envia para o Gnome Keyring para ser salvo. Na próxima vez que ele / ela fizer login, a senha será retirada do Gnome Keyring, mas se em 1º de junho, por exemplo, o usuário tiver que escrever a senha novamente.

Código:

    #!/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
    
por mYzk 16.05.2014 / 08:07

2 respostas

4

Enquanto procurava a mesma coisa, me deparei com essa pergunta e como não havia resposta atualizada (a única resposta está em um comentário), aqui está a minha:

Confira este . Pode ser usado facilmente para scripts

python -c "import keyring; print(keyring.get_password('name', 'username'))"
python -c "import keyring; keyring.set_password('name', 'username', '$PASSWORD')"

e em teoria deveria trabalhar com muitos daemons keyring.

    
por Ivaylo Petrov 25.11.2015 / 16:46
2

De acordo com essa resposta , você pode usar 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
    
por Nicolas 11.05.2016 / 15:07