Przekazywanie x11 z paramiko
Próbuję uruchomić polecenie za pomocąparamiko
powinien być w stanie otworzyć okno X. Skrypt, którego używam, wyglądałby następująco:
import paramiko
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect('192.168.122.55', username='user', password='password')
transport = ssh_client.get_transport()
session = transport.open_session()
session.request_x11()
stdin = session.makefile('wb')
stdout = session.makefile('rb')
stderr = session.makefile_stderr('rb')
session.exec_command('env; xterm')
transport.accept()
print 'Exit status:', session.recv_exit_status()
print 'stdout:\n{}'.format(stdout.read())
print 'stderr:\n{}'.format(stderr.read())
session.close()
Niestety, po uruchomieniu powyższego skryptu otrzymuję to wyjście:
Exit status: 1
stdout:
SHELL=/bin/bash
XDG_SESSION_COOKIE=8025e1ba5e6c47be0d2f3ad6504a25ee-1347286654.617967-1932974971
SSH_CLIENT=192.168.122.1 58654 22
USER=user
MAIL=/var/mail/user
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
PWD=/home/user
LANG=en_US.UTF-8
SHLVL=1
HOME=/home/user
LOGNAME=user
SSH_CONNECTION=192.168.122.1 58654 192.168.122.55 22
DISPLAY=localhost:10.0
_=/usr/bin/env
stderr:
xterm: Xt error: Can't open display: localhost:10.0
Jeśli uruchomię następujące polecenie w terminalu:
ssh -X [email protected] 'env; xterm'
wtedy dostaję te same zmienne środowiskowe (niektóre porty się zmieniły), więc powiedziałbym, że moje środowisko jest poprawne. Wciąż jednak brakuje mi czegoś do zrobieniaparamiko
pracować z przekazywaniem x11.
Kilka rzeczy, które próbowałem to:
Użyjhandler
parametr wrequest_x11
: poza drukowaniem wartości, nie dostałem się dalej niż z domyślnym programem obsługi.Użyjauth_cookie
parametr wrequest_x11
: próbowałem zakodować wartość cookie, która była używana zgodnie zxauth list
wydajność. Pomysł polegał na uniknięciu problemów, które mogą się zdarzyć zgodnie z ciągiem dokumentacji wparamiko
samo:Jeśli pominiesz auth_cookie, zostanie wygenerowana, użyta i zwrócona nowa bezpieczna losowa wartość 128-bitowa. Będziesz musiał użyć tej wartości, aby zweryfikować przychodzące żądania x11 i zastąpić je rzeczywistym lokalnym plikiem cookie x11 (który wymaga znajomości protokołu x11).
Czy jest jeszcze coś, co mogę zrobić, aby to działało lub rozwiązywało problem?
Uwaga: zostało to wcześniej zadane w:
superużytkownik: jedyna odpowiedź wskazuje narequest_x11
dokumentacja, której próbowałem użyć bezskutecznie.przepełnienie stosu: zaakceptowana odpowiedź sugeruje użyciehandler
parametr, ale jest źle.github: brak odpowiedzi przez ponad rok.