从我的本地计算机ssh
到远程服务器以及有关 X 显示的身份验证。我知道在此过程中MIT-MAGIC-COOKIES
使用了 ,并且服务器和客户端中的值需要相同才能使身份验证过程有效。
但是,当我登录到远程服务器并确认 X 显示内容运行良好(例如执行xclock
以查看xclock
应用程序是否在我的本地计算机中弹出)时,当我检查 cookie 的值时,本地计算机中的值而远程服务器中的情况似乎有所不同。这是命令行:
远程服务器中的cookie值
chulhyun@chulhyun-Inspiron-3420:~$ ssh -X Black@$labcom
Last login: Wed Jun 25 10:02:25 2014 from
Black@Black-PC ~
$ xclock ### xclock appears in local machine.
Black@Black-PC ~
$ xauth list
Black-PC/unix:10 MIT-MAGIC-COOKIE-1 708f623489b1ea129a77e98287d130ca
本地机器中的 cookie 值
chulhyun@chulhyun-Inspiron-3420:~$ xauth list
chulhyun-Inspiron-3420/unix:0 MIT-MAGIC-COOKIE-1 5ddd2ce92004eab53ceee8a64b7b88c0
正如你所看到的,两台机器中的cookie值是不同的。那么X显示器不应该不工作吗?
我在这里缺少什么?
PS 我听说其中$XAUTHORITY
包含文件的路径xauthority
,我已经在本地计算机中检查了该路径:
chulhyun@chulhyun-Inspiron-3420:~$ echo $XAUTHORITY
/var/run/gdm/auth-for-chulhyun-iZfH2u/database
当我查看“数据库”文件时,内容不可读,因为内容由奇怪的字符组成。
^A^@^@^Vchulhyun-Inspiron-3420^@^A0^@^RMIT-MAGIC-COOKIE-1^@^P]?,? ^D??<??? K{??
这可能与问题有关吗?
更新
远程服务器中xhost
的结果$XAUTHORITY
Black@Black-PC ~
$ xhost
access control enabled, only authorized clients can connect
SI:localuser:chulhyun
Black@Black-PC ~
$ echo $XAUTHORITY
*事实证明$XAUTHORITY
未定义...这是正常的吗?
xhost
在本地机器上的结果
chulhyun@chulhyun-Inspiron-3420:~$ xhost
access control enabled, only authorized clients can connect
SI:localuser:chulhyun
答案1
我相信您对 SSH 如何通过在远程服务器端建立的隧道执行 X11 连接的代理以及 magic cookies 通常的工作方式感到困惑。从 SSH 手册页:
摘抄The DISPLAY value set by ssh will point to the server machine, but with a
display number greater than zero. This is normal, and happens
because ssh creates a “proxy” X server on the server machine for forwarding
the connections over the encrypted channel.
ssh will also automatically set up Xauthority data on the server machine.
For this purpose, it will generate a random authorization cookie,
store it in Xauthority on the server, and verify that any forwarded
connections carry this cookie and replace it by the real cookie when the
connection is opened. The real authentication cookie is never sent to the
server machine (and no cookies are sent in the plain).
因此,看起来在远程服务器端向您显示的魔法 Cookie 实际上并不是本地服务器(您的端)上真正的魔法 Cookie。请记住,当您通过 SSH 连接到远程服务器时,DISPLAY 的设置如下:
$ echo $DISPLAY
localhost:11.0
魔法饼干是这样连接的$DISPLAY
:
$ xauth list
remotey.dom.com/unix:11 MIT-MAGIC-COOKIE-1 00f505f4c5731714d30f24a956d4cb8f
告诉我们的是/unix:11
。这是 SSH 连接本地端的神奇 cookie,而不是本地服务器的 X11,通常是:0
.
.X权威
确实,该文件包含神奇的 cookie,但它是一个二进制文件,您通常通过命令与其进行交互xauth
。有关这方面的更多信息,请参阅xauth
的手册页。
手动进行
如果执行以下操作,您通常会看到此消息出现:
$ ssh -X user1@remotey
$ su - user2
$ xclock
X11 connection rejected because of wrong authentication.
X connection to localhost:10.0 broken (explicit kill or server shutdown).
这是因为第二个用户对.Xauthority
您最初登录时通过 SSH 传递的 magic cookie 一无所知。您可以xauth add
在作为 user1 时生成所需的内容并作为 user2 使用它,如下所示:
$ ssh -X user1@remotey
$ echo $DISPLAY
localhost:10.0
请注意,上面您正在显示 # :10.0
。现在生成xauth add
该显示所需的#:
$ echo xauth add $(xauth list ${DISPLAY#localhost})
xauth add remotey.dom.com/unix:10 MIT-MAGIC-COOKIE-1 111ef940f6d75b4a9eb64ea3579ef67e
现在成为 user2 并添加它:
$ su - user2
$ xauth add remotey.dom.com/unix:10 MIT-MAGIC-COOKIE-1 111ef940f6d75b4a9eb64ea3579ef67e
$ xclock
我们得到了预期的时钟显示。
笔记:一旦您掌握了上述内容,您还可以在单个命令行中执行操作。
使用苏$ xauth extract - ${DISPLAY#localhost} | \
su - user2 -c "xauth merge -; xclock"
使用须藤
$ xauth extract - ${DISPLAY#localhost} | \
sudo su - user2 -c "xauth merge -; xclock"