Damit die X11-Weiterleitung über ssh funktioniert, sind drei Dinge erforderlich.
- Ihr Client muss so eingerichtet sein, dass er X11 weiterleitet.
- Ihr Server muss so eingerichtet sein, dass X11-Weiterleitungen möglich sind.
- Ihr Server muss in der Lage sein, die X11-Authentifizierung einzurichten.
Wenn Sie sowohl # 1 als auch # 2 haben, aber # 3 fehlen, erhalten Sie eine leere Umgebungsvariable DISPLAY.
Suppe-zu-Nuss, hier erfahren Sie, wie Sie die Weiterleitung von X11 zum Laufen bringen.
Stellen Sie auf Ihrem Server sicher, dass / etc / ssh / sshd_config Folgendes enthält:
X11Forwarding yes
X11DisplayOffset 10
Möglicherweise müssen Sie sshd SIGHUPEN, damit diese Änderungen übernommen werden.
cat /var/run/sshd.pid | xargs kill -1
Stellen Sie sicher, dass auf Ihrem Server xauth installiert ist.
belden@skretting:~$ which xauth
/usr/bin/xauth
Wenn Sie xauth nicht installiert haben, tritt das Problem "Leere DISPLAY-Umgebungsvariable" auf.
Stellen Sie auf Ihrem Client eine Verbindung zu Ihrem Server her. Vergewissern Sie sich, dass ssh die Weiterleitung von X11 zulässt. ich bevorzuge
belden@skretting:~$ ssh -X blyman@the-server
aber du magst vielleicht
belden@skretting:~$ ssh -o ForwardX11=yes blyman@the-server
oder Sie können dies in Ihrer ~ / .ssh / config einrichten.
Ich bin heute auf diese leere DISPLAY-Umgebungsvariable gestoßen, als ich auf einen neuen Server zugegriffen habe, den ich nicht verwalte. Das Aufspüren des fehlenden xauth-Teils hat ein bisschen Spaß gemacht. Hier ist, was ich getan habe und was Sie auch tun können.
Auf meiner lokalen Workstation, auf der ich Administrator bin, habe ich überprüft, ob / etc / ssh / sshd_config für die Weiterleitung von X11 eingerichtet wurde. Wenn ich -X wieder in localhost einsetze, wird mein DISPLAY korrekt eingestellt.
Es war nicht allzu schwer, DISPLAY zu zwingen, sich zu entfernen. Ich musste nur beobachten, was sshd und ssh taten, um es richtig einzustellen. Hier ist die vollständige Ausgabe von allem, was ich unterwegs getan habe.
blyman@skretting:~$ mkdir ~/dummy-sshd
blyman@skretting:~$ cp -r /etc/ssh/* ~/dummy-sshd/
cp: cannot open `/etc/ssh/ssh_host_dsa_key' for reading: Permission denied
cp: cannot open `/etc/ssh/ssh_host_rsa_key' for reading: Permission denied
Anstatt sudo zu verwenden, um das Kopieren meiner ssh_host_ {dsa, rsa} _key-Dateien zu erzwingen, habe ich ssh-keygen verwendet, um für mich selbst Dummy-Dateien zu erstellen.
blyman@skretting:~$ ssh-keygen -t rsa -f ~/dummy-sshd/ssh_host_rsa_key
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/blyman/dummy-sshd/ssh_host_rsa_key.
Your public key has been saved in /home/blyman/dummy-sshd/ssh_host_rsa_key.pub.
Spülen und wiederholen mit -t dsa:
blyman@skretting:~$ ssh-keygen -t dsa -f ~/dummy-sshd/ssh_host_dsa_key
# I bet you can visually copy-paste the above output down here
Bearbeiten Sie ~ / dummy-sshd / sshd_config, um auf die richtigen neuen ssh_host-Schlüsseldateien zu verweisen.
# before
blyman@skretting:~$ grep ssh_host /home/blyman/dummy-sshd/sshd_config
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
# after
blyman@skretting:~$ grep ssh_host /home/blyman/dummy-sshd/sshd_config
HostKey /home/blyman/dummy-sshd/ssh_host_rsa_key
HostKey /home/blyman/dummy-sshd/ssh_host_dsa_key
Starten Sie sshd an einem neuen Port im nicht getrennten Modus:
blyman@skretting:~$ sshd -p 50505 -f ~/dummy-sshd/sshd_config -d
sshd re-exec requires execution with an absolute path
Ups, korrigiere diesen Pfad besser:
blyman@skretting:~$ /usr/sbin/sshd -p 50505 -f ~/dummy-sshd/sshd_config -d
debug1: sshd version OpenSSH_5.5p1 Debian-4ubuntu6
debug1: read PEM private key done: type RSA
debug1: Checking blacklist file /usr/share/ssh/blacklist.RSA-2048
debug1: Checking blacklist file /etc/ssh/blacklist.RSA-2048
debug1: private host key: #0 type 1 RSA
debug1: read PEM private key done: type DSA
debug1: Checking blacklist file /usr/share/ssh/blacklist.DSA-1024
debug1: Checking blacklist file /etc/ssh/blacklist.DSA-1024
debug1: private host key: #1 type 2 DSA
debug1: setgroups() failed: Operation not permitted
debug1: rexec_argv[0]='/usr/sbin/sshd'
debug1: rexec_argv[1]='-p'
debug1: rexec_argv[2]='50505'
debug1: rexec_argv[3]='-f'
debug1: rexec_argv[4]='/home/blyman/dummy-sshd/sshd_config'
debug1: rexec_argv[5]='-d'
Set /proc/self/oom_adj from 0 to -17
debug1: Bind to port 50505 on 0.0.0.0.
Server listening on 0.0.0.0 port 50505.
debug1: Bind to port 50505 on ::.
Server listening on :: port 50505.
Pop ein neues Terminal und ssh in localhost auf Port 50505:
blyman@skretting:~$ ssh -p 50505 localhost
The authenticity of host '[localhost]:50505 ([::1]:50505)' can't be established.
RSA key fingerprint is 81:36:a5:ff:a3:5a:45:a6:90:d3:cc:54:6b:52:d0:61.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[localhost]:50505' (RSA) to the list of known hosts.
Linux skretting 2.6.35-32-generic #67-Ubuntu SMP Mon Mar 5 19:39:49 UTC 2012 x86_64 GNU/Linux
Ubuntu 10.10
Welcome to Ubuntu!
* Documentation: https://help.ubuntu.com/
1 package can be updated.
0 updates are security updates.
Last login: Thu Aug 16 15:41:58 2012 from 10.0.65.153
Environment:
LANG=en_US.UTF-8
USER=blyman
LOGNAME=blyman
HOME=/home/blyman
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
MAIL=/var/mail/blyman
SHELL=/bin/bash
SSH_CLIENT=::1 43599 50505
SSH_CONNECTION=::1 43599 ::1 50505
SSH_TTY=/dev/pts/16
TERM=xterm
DISPLAY=localhost:10.0
Running /usr/bin/xauth remove unix:10.0
/usr/bin/xauth add unix:10.0 MIT-MAGIC-COOKIE-1 79aa9275ced418dd445d9798b115d393
Schauen Sie sich die letzten drei Zeilen an. Ich hatte zufällig DISPLAY gesetzt und hatte diese zwei gut aussehenden Zeilen aus / usr / bin / xauth.
Von dort aus war es ein Kinderspiel, mein / usr / bin / xauth nach /usr/bin/xauth.old zu verschieben, die Verbindung zu ssh zu trennen und das sshd anzuhalten und dann sshd und ssh wieder in localhost zu starten.
Als / usr / bin / xauth nicht mehr vorhanden war, wurde DISPLAY in meiner Umgebung nicht angezeigt.
Hier ist nichts Geniales los. Meistens hatte ich das Glück, einen vernünftigen Ansatz zu wählen, um dies auf meinem lokalen Computer zu reproduzieren.