我有一个带有本地用户帐户的服务器,每个用户都具有 samba 访问权限,这样
\\myserver
让他们进入他们的主目录。
在 Linux 的某个给定的 samba 共享文件夹中,我有一个startvncsession.x
文件,我希望用户无需通过 SSH 连接到 Linux 服务器,就可以用鼠标完成所有操作 - 打开一个 samba 窗口 - 双单击某个 exe 文件 - 并导致该vncserver
命令发生在该 Linux 服务器上的命令行上。
这样的事情可能吗,如果可能的话怎么办?
我目前有 C 代码导致发生这种dcv create-session <username>
情况,但用户必须在 linux 命令行中输入 putty,startvncsession.x
然后退出 putty。许多用户不了解 Linux,只想通过单击鼠标来完成所有操作,而不必记住要键入的任何内容...
答案1
问题是,任何脚本或程序虽然驻留在服务器上,但当用户按照您所描述的方式访问它时,它们都会在用户的本地计算机上执行。
一种可能的解决方法是基于您描述的当前流程(用户通过 PuTTY 连接,运行程序,然后注销),将该流程自动化为在用户本地计算机上运行的脚本。由于您已经安装了 PuTTY,因此执行此操作的一种方法是使用 Plink。 (查找 Plink 的文档这里) Plink 允许您启动 SSH 会话并从命令行运行命令,就像您在 Linux 上使用 SSH 客户端一样。考虑使用以下内容创建批处理脚本 (.bat),并根据需要更改变量的值:
@ECHO OFF
SET ssh_server=192.168.0.100
SET ssh_user=ron
SET ssh_pass=mynameisron
SET putty_path="C:\Program Files\PuTTY"
SET ssh_cmd="startvncsession.x"
%putty_path%\plink.exe -no-antispoof -ssh -pw %ssh_pass% %ssh_user%@%ssh_server% %ssh-cmd%
第一次运行时,系统会提示您将密钥添加到缓存中,但后续运行不会出现这样的提示。
最大的问题是用户的凭据以明文形式保存在脚本中。要解决这个问题,您可以删除密码变量和参数,保留用户名,如下所示:
@ECHO OFF
SET ssh_server=192.168.0.100
SET ssh_user=ron
SET putty_path="C:\Program Files\PuTTY"
SET ssh_cmd="startvncsession.x"
%putty_path%\plink.exe -no-antispoof -ssh %ssh_user%@%ssh_server% %ssh-cmd%
运行上述命令将每次提示用户输入密码,或者您可以设置公钥身份验证(请参阅上面的链接文档)。
为了使其更通用,以便任何用户都可以使用它,您可以删除 user 变量和参数,如下所示:
@ECHO OFF
SET ssh_server=192.168.0.100
SET putty_path="C:\Program Files\PuTTY"
SET ssh_cmd="startvncsession.x"
%putty_path%\plink.exe -no-antispoof -ssh %ssh_server% %ssh-cmd%
使用此脚本,系统将提示用户输入用户名和密码。