使用BASH以编程方式设置TightVNC

使用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

我正在编写一个脚本来在许多基于debian的设备上设置VNC(以及其他东西)。我想在这个设置中包括VNC(特别是,如果可能的话,使用tightVNC),并让它设置一个给定的密码(由脚本随机生成)。问题是,我找到的每个指南似乎都假设有人在做这件事,并且准备好坐下来输入密码并按enter键。我似乎无法让Bash向VNC回显密码(它总是说“密码太短”),也无法让“expect”正常工作

我找到的示例指南如下所示:

我正在寻找类似的东西:

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