使用脚本分配 VNC 密码

Wil*_*iam 8 vnc bash scripts password tightvncserver

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

谢谢。

Daw*_*ied 10

我在脚本中找到了另一种方法(以 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
Run Code Online (Sandbox Code Playgroud)

干杯!


ste*_*ver 8

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

#!/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
Run Code Online (Sandbox Code Playgroud)

如果您不想(或不能)使用“expect”,那么网络上有各种黑客可用 - VNC 密码显然使用了一种 DES 加密形式,因此使用术语“VNC”“DES”“密码”进行搜索' 应该为您提供您需要的东西(我不会在这里链接,因为我不能保证任何特定的)。

为了完整起见,需要注意的是Ubuntu默认“桌面共享”使用葡萄酒和密码似乎是简单的base64编码,因此可以直接例如设置

gsettings set org.gnome.Vino vnc-password "$(echo -n "newpass" | base64)"
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助


小智 7

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

RUN printf "password\npassword\n\n" | vncpasswd
Run Code Online (Sandbox Code Playgroud)

  • 我认为这是最简单最干净的方法。在脚本中工作,在我的情况下,我使用的是 `su`,它也在那里工作,即 `su -l -c 'printf "password\npassword\n\n" | vncpasswd'用户名` (2认同)