Я пытаюсь запустить команду с paramiko
, которая должна иметь возможность открыть окно X. script Я использую что-то следующее:
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()
К сожалению, когда я запускаю script выше, я получаю этот вывод:
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
Если я запустил следующую команду в терминале:
ssh -X [email protected] 'env; xterm'
тогда я получаю одни и те же переменные среды (некоторые порты изменились, хотя), поэтому я бы сказал, что моя среда верна. Тем не менее, я все еще не могу что-то сделать, чтобы paramiko
работал с пересылкой x11.
Несколько вещей, которые я пробовал:
- Используйте параметр
handler
вrequest_x11
: кроме значений печати, я не получил больше, чем с обработчиком по умолчанию. - Используйте параметр
auth_cookie
вrequest_x11
: попытался сделать hardcode значение cookie, которое использовалось в соответствии с выходомxauth list
. Идея сделать это заключалась в том, чтобы избежать проблем, которые могут произойти в соответствии со строкой документации вparamiko
:
Если вы опустите auth_cookie, новое безопасное случайное 128-битное значение будет генерируется, используется и возвращается. Вам нужно будет использовать это значение для проверить входящие запросы x11 и заменить их фактическими локальными x11 cookie (что требует некоторого knoweldge протокола x11).
Есть ли что-то еще, что я мог бы сделать, чтобы он работал или устранял проблему?
Примечание: Об этом ранее говорилось в:
- superuser: единственный ответ указывает на документацию
request_x11
, которую я уже пытался использовать безрезультатно. - stackoverflow: принятый ответ предлагает использовать параметр
handler
, но это неправильно. - github: не более года предоставляется ответ.