我正在使用脚本自动设置计算机。我需要为用户分配 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"