Date: Tue, 18 Mar 2003 12:04:46 +0000 From: Matthew Seaman <m.seaman@infracaninophile.co.uk> To: freebsd-questions@FreeBSD.ORG Subject: Re: X11 remote connection problem Message-ID: <20030318120445.GB46378@happy-idiot-talk.infracaninophi> In-Reply-To: <Pine.LNX.4.53.0303180131340.10797@carlsberg.cs.ubc.ca> References: <Pine.LNX.4.53.0303180131340.10797@carlsberg.cs.ubc.ca>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, Mar 18, 2003 at 01:40:38AM -0800, Kan Cai wrote:
>=20
> Hey, all
>=20
> I know this question seems dumb, but it really screws me a lot.
> Following the handbook, I tried to make my remote X connection work, but
> with no luck. Here is the error message.
>=20
> #setenv DISPLAY my_machine:0.0
> #>gvim
> Xlib: connection to "my_machine:0.0" refused by server
> Xlib: Invalid MIT-MAGIC-COOKIE-1 key
> E233: cannot open displayXlib: connection to "my_machine:0.0"
> refused by server
> Xlib: Invalid MIT-MAGIC-COOKIE-1 key
>=20
>=20
> I guess it is because I am using KDM instead XDM, so that the handbook
> instruction doesn't work. I am wondering if someone could instruct me a
> good reference page. I am using FreeBSD 4.7, KDE 3.0.
No --- this is controlled at the X protocol level, somewhat below
kdm(8) or xdm(8). You're actually running into a mechanism designed
to secure your system, and seeing as someone with remote access to
your desktop can do nasty things such as intercepting all of your
keystrokes or mouse clicks, knowing how to permit remote access by X
clients to your desktop securely is quite important.
I'm going to describe three ways of permitting you to display windows
=66rom a remote X application on your desktop, pretty much in order of
preference, worst to best.
i) xhost(1)
xhost(1) was the original mechanism for controlling remote access
to an X server. It's a pretty basic mechanism that just lists
hosts which are allowed to pop up windows on your screen. It's
only suitable for use on a private network where you control all
access to all machines on the network.
Examples:
% xhost +local:
Permit all users on your local machine to display windows on
your desktop. You should set $DISPLAY to: ':0.0' so that X
traffic goes via the Unix domain socket in /tmp, rather than a
network socket.
% xhost +inet:remote-machine
Permit all users on remote-machine to display stuff on your
desktop. Set $DISPLAY to 'local-machine:0.0' for this.
ii) xauth(1)
This is the replacement for xhost(1), which permits access based
on the remote user having access to a cryptographic token found in
the ~/.Xauthority file. This offers much finer grained control
than xhost(1), and it also underlies the third method I'll talk
about later. Much of what xauth(1) does is automatic --- when you
log in on your desktop, all of the right tokens are created if
necessary or an existing token is read out of your .Xauthority
file. In order to permit another user, either on a remote machine
or a different UID on your local machine, you have to extract the
tokens for your display from the .Xauthority file:
% xauth nextract - $DISPLAY > xauth-tokens
Now copy the xauth-tokens file to the remote machine and add them
to the .Xauthority file there:
% xauth nmerge xauth-tokens
and you should now be able to pop up windows to your heart's
content.
iii) ssh X-tunnelling.
Both of the previous methods suffer from the major flaw that all
of the X traffic is sent across the network in the clear. That is
approximately as bad as using rsh(1) or rlogin(1) instead of
ssh(1) --- anything you do can be snooped on, anything you type
into an X application, like the passwords to some system resource,
can be intercepted.
The best method of avoiding this is to always use ssh(1) to login
or run remote programs and enable the built-in ssh facility to
transmit X protocol traffic through an encrypted tunnel.
On the desktop machine, which is the X server but the ssh client,
make sure that:
ForwardX11 yes
appears in either /etc/ssh/ssh_config or ~/.ssh/config (obviously
in a 'Host' section matching the remote machine name) -- see
ssh_config(5) for details.
On the remote machine, which is where the X client runs and that
you access the xxh server on, ensure that:
X11Forwarding yes
appears in /etc/ssh/sshd_config (see sshd_config(5) for details).
Actually, that's the default setting: so long as 'X11Forwarding
no' *doesn't* appear things should work. If you change the
sshd_config file, tell sshd to reread it using a HUP signal:
# killall -HUP sshd
Now, when you ssh(1) into the remote machine, you should find that
the $DISPLAY variable is automatically set to something like:
% echo $DISPLAY
localhost:10.0
Make sure your shell initialization files don't overwrite that
setting or things won't work. The hostname part of $DISPLAY will
always be 'localhost' --- what's happening is that sshd(8) is
listening on port 6000 + displaynum (6010 in my example),
pretending to be an X server. Any X traffic it receives is
encrypted and sent over the network to your desktop machine, where
it is decrypted and fed into the real X server.
ssh(1) uses xauth(1) to automatically set up the ~/.Xauthority
files as in (ii) so that the X server will allow access. =20
Cheers,
Matthew
--=20
Dr Matthew J Seaman MA, D.Phil. 26 The Paddocks
Savill Way
PGP: http://www.infracaninophile.co.uk/pgpkey Marlow
Tel: +44 1628 476614 Bucks., SL7 1TH UK
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-questions" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030318120445.GB46378>
