使用脚本分配 VNC 密码

使用脚本分配 VNC 密码

我正在使用脚本自动设置计算机。我需要为用户分配 VNC 服务器密码,这通常使用命令完成vncserver。但是,它会提示用户输入并重新输入密码,而脚本无法做到这一点。那么,如何在没有交互式提示的情况下设置 VNC 密码?

谢谢。

答案1

我在脚本中找到了另一种执行此操作的方法(以 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

干杯!

答案2

今天能够以这种方式来做到这一点(至少从dockerfile):

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

答案3

据我所知,vncserver 命令仅在密码文件(默认情况下为 $HOME/.vnc/passwd)不存在时才会提示输入密码 - 通常是第一次为特定用户运行。您可以使用“expect”编写初始 vncserver 交互脚本,或者通过 expect 调用 vncpasswd 实用程序预先创建用户的密码文件您第一次运行 vncserver;例如 [注意:这绝对是最小的,如果在严肃的环境中使用它,您应该添加一些健全性检查]

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

如果您不想(或不能)使用“expect”,那么网络上有各种各样的破解方法 - VNC 密码显然使用了一种 DES 加密形式,因此使用术语“VNC”“DES”“密码”进行搜索应该可以得到您需要的内容(我不会在这里链接,因为我不能保证任何一个特定的)。

为了完整起见,请注意默认的 Ubuntu“桌面共享”使用 vino,并且密码为似乎只是 base64 编码,因此可以直接设置它,例如

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

希望这可以帮助

答案4

在 Ansible 中(需要pexpect在目标上安装):

    - name: Set vnc password for tigervnc
      expect:
        command: vncpasswd /home/{{ UserName }}/.vnc/passwd
        responses:
          (?i)password: "max8char"
          (?i)verify: "max8char"
          (?i)\(y/n\): "n"

相关内容