通过命令行自动化VNC授权流程

7
我收到一个输入,格式为vnc://172.16.41.101&passwd=test。
我的任务是: 1. 提取IP地址。 2. 提取密码。 3. 使用提供的IP和密码启动vncviewer。 4. 自动化完成上述所有步骤。
提取IP和密码很容易。然后我使用提供的IP启动vncviewer,但如何传递密码而不提示用户输入密码呢?

1
不确定您在这里询问什么。您正在编写什么应用程序,"我"指的是谁在"我正在接收输入"中?您是在编写bash脚本吗?原生应用程序?您是否只是要求vncviewer应用程序的命令行参数?(有很多种vncviewer?)如果是这样,请查阅其手册。 - Henrik Heimbuerger
看看这个很酷的 https://github.com/trinitronx/vncpasswd.py 工具,它可以生成一个混淆的密码文件,用于 VNC 授权。 - massisenergy
4个回答

7

如果你的 vncviewer 没有 -autopass 选项,你可以使用 vncpasswd 生成一个密码文件,并将其传递到 -passwd 选项中:

vncviewer -passwd <(vncpasswd -f <<<"password") host:display

为了使此答案有效,您需要安装“tigervnc-tools”软件包以便使用“vncpasswd”,否则您将无法仅使用“vncviewer”进行连接。 - FdelS

6
假设(根据标签)您正在使用命令提示符中的vncviewer程序,我认为您可以像这样操作:
echo "password" | vncviewer -autopass host:display

使用您的示例:vnc://172.16.41.101&passwd=test
echo "test" | vncviewer -autopass 172.16.41.101

@Arihant Nahata,请问您是否已经检查了这个解决方案?如果无法工作或者您已经找到了自己的答案,请跟进并发表一下 :-) - Bruno Flávio
但是没有“-autopass”开关,这并不起作用。 - user4104817
如果没有 -autopass,请尝试使用下面的 -passwd 解决方案。 - Albert Peschar

0

没有提供更多细节,很难完美地回答这个问题,例如发布代码/命令/配置以实现我建议的内容...例如,您需要具体说明每一方的VNC服务器、客户端、平台等等。

话虽如此,如果您可以重新设计所有这些工作方式-我建议根本不使用密码!

相反,设置一个SSH隧道,并使用密钥对认证来保护它。甚至在使用此计划时,您可以删除任何VNC的防火墙例外!

如果您这样做,不仅您不必提供密码,而且整个VNC系统将更加安全!


0

我的版本的vncviewer中不可用-autopass

工具vncpasswd也不可用(显然是与vnc-server一起提供的)。


演示使用xvfbx11vnc,在虚拟X环境中运行程序gimp(如果已安装)。

并使用vncviewer显示,无需提示输入密码。

x11vnc -storepasswd 1234 /tmp/vncpass
xvfb-run --listen-tcp --server-num 30 --auth-file /tmp/xvfb.auth -s "-ac -screen 0 1920x1080x24" gimp
x11vnc -rfbport 4544 -rfbauth /tmp/vncpass -display :30 -forever -auth /tmp/xvfb.auth
vncviewer -passwd /tmp/vncpass machine:4544

一句话:
x11vnc -storepasswd 1234 /tmp/vncpass && xvfb-run --listen-tcp --server-num 30 --auth-file /tmp/xvfb.auth -s "-ac -screen 0 1920x1080x24" gimp & x11vnc -rfbport 4544 -rfbauth /tmp/vncpass -display :30 -forever -auth /tmp/xvfb.auth & vncviewer -passwd /tmp/vncpass $(hostname):4544

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接