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)
干杯!
据我所知,如果密码文件(默认情况下,$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)