有没有办法通过 SSH 查看(和控制)远程桌面?我无法物理访问远程主机。
答案1
方法 1:
这可以通过 vino vnc 服务器和 remmina 实现(两者都是 ubuntu 的默认设置;如果没有,请通过运行安装sudo apt-get install remmina
)。然后在终端提示符下从本地计算机运行以下命令:
ssh -Y gman@remote
. 使用受信任的 X11 转发,否则它将无法工作vino-preferences
. 它将打开 vino-preferences。也可以单击
configure network automatically to accept connection
。但不要输入任何密码,它是 base64 编码的。然后点击关闭。然后运行:sudo -s export DISPLAY=:0.0 xhost + /usr/lib/vino/vino-server &
它将启动 vino 服务器。
从服务器注销:
xhost - Press CTRL+C twice exit exit
然后打开雷米纳
vnc
.在协议下选择。在选项卡下的
basic
字段中输入服务器地址server
。在 ssh 选项卡上单击
enable ssh tunnel
。在 下ssh authentication
,它可能为password
或public key
:点击保存。然后双击连接名称(如图中的home-desktop)开始浏览远程桌面。
方法 2:
x11vnc
是一个简单的 VNC 服务器,您不必处理 Gnome 设置或 500 个防火墙,只需安装x11vnc
在您的所有计算机上(使用 puppet 或任何您用于大规模控制的工具)。
然后从本地计算机运行:
ssh user@host -L 5900:localhost:5900 "x11vnc -display :0 -noxdamage"
显然交换user@host
远程计算机的用户名和主机名/IP。
然后使用您选择的 VNC 客户端连接到localhost:5900
。SSH 命令在远程计算机上启动一个 vnc 服务器,然后通过 SSH 隧道返回该端口。您不必打开任何端口(只要您已经可以使用 SSH)。
如果您的计算机的显示设置很奇怪,您最好省略-display :0
SSH 命令中的该段。x11vnc
然后会自动尝试找到正确的显示。
来源:问库本图
答案2
解决方案概述
假设您已经OpenSSH Server
在主机上设置了,则必须首先在主机上启用桌面控制。如果您可以首先在本地启用主机上的桌面控制,请转到 1a。如果您必须首先在远程启用主机上的桌面控制,请转到 1b。
接下来在客户端计算机上创建远程桌面客户端配置文件,以便通过 SSH 隧道连接到主机,并最终通过 SSH 隧道查看和控制主机的桌面。
1a. 本地启用主机的远程控制
在主机上执行以下操作:
vino-preferences
vino-preferences
也可以在 Dash 下Desktop Sharing
- 打钩
Allow other users to view your desktop
- 打钩
Allow other users to control your desktop
- 打钩
Require the user to enter this password
- 输入难以猜测的密码
- 关闭
1b. 远程启用主机的远程控制
在客户端计算机上执行以下操作,替换123.123.12.3
为主机的 IP 地址:
ssh -Y 123.123.12.3
- -Y,启用受信任的 X11 转发。受信任的 X11 转发不受 X11 SECURITY 扩展控制。
vino-preferences
vino-preferences
也可以在 Dash 下Desktop Sharing
- 打钩
Allow other users to view your desktop
- 打钩
Allow other users to control your desktop
- 打钩
Require the user to enter this password
- 输入难以猜测的密码
- 关闭
在客户端计算机上创建远程桌面客户端配置文件
在客户端计算机上执行以下操作:
remmina
- remmina 也在 Dash 下
Remmina Remote Desktop Client
Ctrl+N或连接 > 新建
- 填写您的 IP 地址 [123.123.12.3]
Server
- 切换到
SSH
标签
- 打钩
Enable SSH Tunnel
- 将桌面客户端指向非标准 SSH 端口
- 设置您的
SSH Authentication
<username>
和模式 - 连接
查看和控制主机
在客户端计算机上,当<username>
系统要求输入密码时,请输入该密码以创建 SSH 隧道。当系统要求输入 VNC 密码时,请输入您之前在主机中输入的密码。
如果此步骤成功,您现在应该可以通过 SSH 隧道从客户端计算机查看和控制主机的桌面。
答案3
我能够使用以下脚本从远程 ssh 连接设置全新的 Ubuntu 16.04 安装:
/bin/bash #!/bin/bash 导出显示=:0 读取-e-p“ VNC 密码:”-i“ ubuntu”密码 dconf 写入 /org/gnome/desktop/remote-access/enabled true dconf 写入 /org/gnome/desktop/remote-access/prompt-enabled false dconf 写入 /org/gnome/desktop/remote-access/authentication-methods“['vnc']” dconf 写入 /org/gnome/desktop/remote-access/require-encryption false dconf 写入 /org/gnome/desktop/remote-access/vnc-password \“\'$(echo -n $password | base64)\'\” dconf 转储 /org/gnome/desktop/remote-access/ sudo 服务 lightdm 重启
对于任何字符串设置,引号都很重要(引号内的单勾)。要使 dconf 能够写入,它需要访问 XWindows,因此这就是需要导出 DISPLAY 部分的原因。我认为您仍然需要登录到实际 Ubuntu 机器上的桌面才能在此之后连接 VNC。dump 命令只是用来确认所有设置都生效,您实际上并不需要它。
如果您想始终保持显示状态,您可能需要这样做:
dconf 写入 /org/gnome/desktop/screensaver/lock-enabled false dconf 写入 /org/gnome/desktop/screensaver/ubuntu-lock-on-suspend false dconf 写入 /org/gnome/desktop/session/idle-delay “uint32 0”
答案4
如何远程启动 Vino 服务器而不转发 X(仅限命令行)
以将共享其桌面的用户身份登录远程计算机,并将端口 5900 转发到本地主机上的同一端口。使用 PuTTY,重定向设置在 Connection/SSH/Tunnels 中。使用命令行,使用:
ssh -L 5900:localhost:5900 user@remote-computer
vino-server
如果尚未安装,请安装。例如:
sudo apt install vino
启用桌面共享(匹配第一行和第二行的显示数字):
echo $DISPLAY
export DISPLAY=:0
dbus-launch --exit-with-session gsettings set org.gnome.Vino enabled true
dbus-launch --exit-with-session gsettings set org.gnome.Vino prompt-enabled false
dbus-launch --exit-with-session gsettings set org.gnome.Vino require-encryption false
/usr/lib/vino/vino-server
启动 VNC 查看器并连接到localhost
VNC 服务器地址。