paramiko
Xウィンドウを開くことができるコマンドを実行しようとしています。私が使用しているスクリプトは、次のようになります。
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()
残念ながら、上記のスクリプトを実行すると、次の出力が得られます。
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 user@192.168.122.55 'env; xterm'
次に、同じ環境変数を取得します(ただし、一部のポートは変更されています)。したがって、私の環境は正しいと言えます。paramiko
ただし、 x11 転送を機能させるにはまだ何かが欠けています。
私が試したいくつかのことは次のとおりです。
handler
でパラメータを使用しますrequest_x11
。値を出力することを除けば、デフォルトのハンドラーよりも先に進むことはできませんでした。- Use the
auth_cookie
parameter in :出力request_x11
に従って使用されていた Cookie 値をハードコーディングしようとしました。これを行うという考えは、ドキュメンテーション文字列自体xauth list
に従って発生する可能性のある問題を回避することでした:paramiko
auth_cookie を省略すると、新しい安全なランダム 128 ビット値が生成され、使用され、返されます。この値を使用して着信 x11 要求を検証し、それらを実際のローカル x11 cookie に置き換える必要があります (x11 プロトコルの知識が必要です)。
それを機能させたり、問題をトラブルシューティングしたりするために他にできることはありますか?
注:これは以前に尋ねられました:
- スーパーユーザー
request_x11
:私がすでに使用しようとしたドキュメントへの唯一の応答は役に立ちませんでした。 - stackoverflow : 受け入れられた応答は
handler
パラメーターを使用することを提案していますが、それは間違っています。 - github : 1 年以上回答がありません。