web-dev-qa-db-fra.com

Attribuer un mot de passe VNC à l'aide d'un script

J'utilise un script pour configurer automatiquement un ordinateur. Je dois attribuer un mot de passe au serveur vnc pour l'utilisateur, normalement à l'aide de la commande vncserver. Cependant, il invite l'utilisateur à saisir et à ressaisir son mot de passe, ce que le script n'est pas capable de faire. Alors, comment puis-je configurer le mot de passe VNC sans invite interactive?

Merci.

7
William

Autant que je sache, la commande vncserver ne demande un mot de passe que si le fichier de mots de passe (par défaut, $ HOME/.vnc/passwd) est absent - généralement la première fois qu'il est exécuté pour un utilisateur particulier. Vous pouvez soit scripter cette interaction initiale vncserver en utilisant 'expect', soit créer à l'avance le fichier de mot de passe de l'utilisateur en appelant l'utilitaire vncpasswd via expect before vous exécutez vncserver pour la première fois; par exemple. [ATTENTION: ceci est absolument minime, vous devriez ajouter quelques contrôles de cohérence si cela est utilisé dans un environnement sérieux]

#!/bin/sh

prog=/usr/bin/vncpasswd
mypass="newpass"

/usr/bin/expect <<EOF
spawn "$prog"
expect "Password:"
send "$mypass\r"
expect "Verify:"
send "$mypass\r"
expect eof
exit
EOF

Si vous ne voulez pas (ou ne pouvez pas) utiliser 'expect', différents hacks sont disponibles sur le Web - les mots de passe VNC utilisent apparemment une forme de cryptage DES afin de rechercher avec les termes 'VNC '' DES '' mot de passe 'devrait vous fournir ce dont vous avez besoin (je ne vais pas créer de lien ici, car je ne peux en garantir aucun).

Pour être complet, notez que le "partage de bureau" par défaut d'Ubuntu utilise vino et que le mot de passe de that semble être simplement codé en base64; il est donc possible de le définir directement, par exemple.

gsettings set org.gnome.Vino vnc-password "$(echo -n "newpass" | base64)"

J'espère que cela t'aides

8
steeldriver

J'ai trouvé une autre façon de faire cela dans un script (en tant que root):

#!/bin/sh    

myuser="asimov"
mypasswd="mysecret"

mkdir /home/$myuser/.vnc
echo $mypasswd | vncpasswd -f > /home/$myuser/.vnc/passwd
chown -R $myuser:$myuser /home/$myuser/.vnc
chmod 0600 /home/$myuser/.vnc/passwd

À votre santé!

4
Asimov

A été capable de le faire de cette façon aujourd'hui (à partir d'un fichier docker au moins):

RUN printf "password\npassword\n\n" | vncpasswd
3
coding

En modifiant légèrement version de steeldriver , j'ai pu automatiser mon utilisation de vncpasswd. Permet de transmettre le mot de passe et le nom de fichier que vncpasswd doit créer.

Utilisation: $ ./scriptname <filename> <password>

#!/bin/sh    

myuser="$1"
mypass="$2"

/usr/bin/expect <<EOF
spawn /usr/bin/vncpasswd $myuser
expect "Password:"
send "$mypass\r"
expect "Verify:"
send "$mypass\r"
expect eof
exit
EOF
2
Mike J