使用BASH以编程方式设置TightVNC
我正在编写一个脚本来在许多基于debian的设备上设置VNC(以及其他东西)。我想在这个设置中包括VNC(特别是,如果可能的话,使用tightVNC),并让它设置一个给定的密码(由脚本随机生成)。问题是,我找到的每个指南似乎都假设有人在做这件事,并且准备好坐下来输入密码并按enter键。我似乎无法让Bash向VNC回显密码(它总是说“密码太短”),也无法让“expect”正常工作 我找到的示例指南如下所示: 我正在寻找类似的东西:使用BASH以编程方式设置TightVNC,bash,debian,expect,vnc-server,tightvnc,Bash,Debian,Expect,Vnc Server,Tightvnc,我正在编写一个脚本来在许多基于debian的设备上设置VNC(以及其他东西)。我想在这个设置中包括VNC(特别是,如果可能的话,使用tightVNC),并让它设置一个给定的密码(由脚本随机生成)。问题是,我找到的每个指南似乎都假设有人在做这件事,并且准备好坐下来输入密码并按enter键。我似乎无法让Bash向VNC回显密码(它总是说“密码太短”),也无法让“expect”正常工作 我找到的示例指南如下所示: 我正在寻找类似的东西: #!/bin/bash echo "Going to conf
#!/bin/bash
echo "Going to configure VNC"
#turn on vnc server
tightvncserver
#spit out password to vnc server for first run only
echo $password
#confirm the pw
echo $password
但是,在每次初次运行tightvncserver时,它总是要求手动输入密码:
Going to configure VNC
You will require a password to access your desktops.
Password: Password too short
我如何才能1绕过这个问题,或者2使用bash/expect给它一个密码让它开心
# Configure VNC password
umask 0077 # use safe default permissions
mkdir -p "$HOME/.vnc" # create config directory
chmod go-rwx "$HOME/.vnc" # enforce safe permissions
vncpasswd -f <<<"$password" >"$HOME/.vnc/passwd" # generate and write a password
如果您需要与/bin/sh
(或者没有使用#!/bin/bash
shebangs)兼容,则可以改为:
vncpasswd -f >"$HOME/.vnc/passwd" <<EOF
$full_password
$view_password
EOF
vncpasswd-f>“$HOME/.vnc/passwd”
如果您需要与/bin/sh
(或者没有使用#!/bin/bash
shebangs)兼容,则可以改为:
vncpasswd -f >"$HOME/.vnc/passwd" <<EOF
$full_password
$view_password
EOF
vncpasswd-f>“$HOME/.vnc/passwd”echo
s不会将内容写入tightvncserver
进程,因此这不会以您希望的方式工作……因为,正如当前编写的那样,echo
s在tightvncserver
退出之后才会运行。另外,tightvncserver
正在从TTY而不是从stdin读取密码,因此您根本无法通过管道访问它。无论如何,正确的方法是直接使用vncpasswd
命令,不要依赖tightvncserver
来提示,然后假装是TTY来回答该提示。有时密码会被忽略,所以还要设置正确的文件权限:echo
s不会将内容写入tightvncserver
进程,因此不管您希望它以何种方式工作……因为,正如目前编写的那样,echo
s在tightvncserver
退出后才会运行。此外,tightvncserver
正在从TTY而不是从stdin读取密码,因此您根本无法通过管道连接到它。无论如何,正确的方法是直接使用vncpasswd
命令,不要依赖tightvncserver
来提示,然后假装是TTY来回答提示。有时密码会被忽略,所以还要设置正确的文件权限:非常感谢!我似乎找不到tightvncserver的密码位置(我按照您的步骤进行了操作,所有操作都成功了,但它仍然要求输入密码…grrr!),但是,我可以自己搜索。我在home/.vnc/passwd中查找过,虽然那里有一个文件,但我想我可能是自己放在那里的?不知道。我使用的tightvnc
软件包安装为vncserver
,而不是tightvncserver
,因此我们的发行版的做法非常不同……也就是说,您可以手动运行tightvncserver
,设置密码,然后使用类似于find“$HOME”的东西-mmin-30
查找过去30分钟内更改的位置,以查找存储位置。或者阅读tightvncserver
脚本(在我的平台上是perl,但可读性很强),然后看看它以这种方式使用的存储位置。您可以发出strace-tightvncserver 2>&1 | grep passw
来查找它。然后您将看到例如stat64(“/root/.vnc/passwd”,{st_mode=S_IFREG | 0644,st_size=16,…})=0
作为最后一行。别忘了执行chmod 600/root/.vnc/passwd
,否则它将被默默忽略。@realtebo,非常感谢!我似乎找不到tightvncserver的密码位置(我按照您的步骤进行了操作,所有操作都成功了,但它仍然要求输入密码…grrr!),但是,我可以自己搜索。我在home/.vnc/passwd中查找过,虽然那里有一个文件,但我想我可能是自己放在那里的?不知道。我使用的tightvnc
软件包安装为vncserver
,而不是tightvncserver
,因此我们的发行版的做法非常不同……也就是说,您可以手动运行tightvncserver
,设置密码,然后使用类似于find“$HOME”的东西-mmin-30
查找过去30分钟内更改的位置,以查找存储位置。或者阅读tightvncserver
脚本(在我的平台上是perl,但可读性很强),然后看看它以这种方式使用的存储位置。您可以发出strace-tightvncserver 2>&1 | grep passw
来查找它。然后您将看到例如stat64(“/root/.vnc/passwd”,{st_mode=S_IFREG | 0644,st_size=16,…})=0
作为最后一行。不要忘记执行chmod 600/root/.vnc/passwd
,否则它将被静默忽略。@realtebo,