Weisen Sie das VNC-Passwort mithilfe eines Skripts zu

8

Ich verwende ein Skript, um automatisch einen Computer einzurichten. Ich muss dem vnc-Server ein Kennwort für den Benutzer zuweisen, was normalerweise mit dem vncserverBefehl erfolgt. Der Benutzer wird jedoch aufgefordert, sein Kennwort einzugeben und erneut einzugeben, was das Skript nicht kann. Wie kann ich das VNC-Passwort ohne interaktive Eingabeaufforderung einrichten?

Vielen Dank.

Wilhelm
quelle

Antworten:

8

Soweit ich weiß, fordert der Befehl vncserver nur dann zur Eingabe eines Kennworts auf, wenn die Kennwortdatei (standardmäßig $ HOME / .vnc / passwd) fehlt - normalerweise das erste Mal, wenn sie für einen bestimmten Benutzer ausgeführt wird. Sie können diese anfängliche vncserver-Interaktion entweder mit 'erwarten' skripten oder die Kennwortdatei des Benutzers vorab erstellen, indem Sie das Dienstprogramm vncpasswd über "erwarten" aufrufen, bevor Sie vncserver zum ersten Mal ausführen. zB [VORSICHT: Dies ist absolut minimal. Sie sollten einige Sicherheitsüberprüfungen hinzufügen, wenn dies in einer ernsthaften Umgebung verwendet wird.]

#!/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

Wenn Sie "erwarten" nicht verwenden möchten (oder können), stehen im Web verschiedene Hacks zur Verfügung. VNC-Kennwörter verwenden anscheinend eine Form der DES-Verschlüsselung, sodass Sie mit den Begriffen "VNC", "DES" -Kennwort suchen Ich sollte dir das besorgen, was du brauchst (ich werde hier nicht verlinken, da ich nicht für einen bestimmten bürgen kann).

Für Vollständigkeit, beachten Sie, dass der Standard - Ubuntu ‚Desktop Sharing‘ Anwendungen vino, und das Passwort für die, dass erscheint einfach Base64 codiert zu werden, so dass es möglich ist , es direkt zu setzen zB

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

Hoffe das hilft

Steeldriver
quelle
5

Ich habe einen anderen Weg gefunden, dies in einem Skript (als root) zu tun:

#!/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

Prost!

Asimov
quelle
Haben Sie vncserver danach anders gestartet? Wenn ich die passwd-Datei manuell einstelle, werde ich beim Ausführen von vncserver immer noch aufgefordert, ein Kennwort anzugeben.
Christopher Shroba
beste Antwort IMOH
Abdennour TOUMI
4

Konnte es heute so machen (zumindest aus einer Docker-Datei):

RUN printf "password\npassword\n\n" | vncpasswd
Codierung
quelle
1
Ich denke, das ist der einfachste und sauberste Weg. Funktioniert in einem Skript und in meinem Fall verwende ich suund es funktioniert auch dort, dhsu -l -c 'printf "password\npassword\n\n" | vncpasswd' username
Raj
Die Verwendung des obigen Kommentars von @raj hat für mich gut funktioniert (ich bin auf VNC4):sudo printf "password\npassword\n\n" | vnc4passwd
Lance Kind
2

Durch geringfügige Änderung der Version von steeldriver konnte ich die Verwendung von vncpasswd automatisieren. Ermöglicht die Übergabe des Kennworts und des Dateinamens für vncpasswd.

Verwendungszweck: $ ./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
Mike J.
quelle
2
Es wird generell davon abgeraten, Geheimnisse als Befehlszeilenargumente zu übergeben, da sie von allen Benutzern angezeigt werden können.
David Foerster