web-dev-qa-db-ja.com

SSH X11が機能しない

私は自宅と職場のコンピューターを持っていますが、自宅のコンピューターには静的IPアドレスがあります。

職場のコンピューターから自宅のコンピューターにsshで接続すると、ssh接続は機能しますが、X11アプリケーションが表示されません。

自宅の_/etc/ssh/sshd_config_で:

_X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes
_

仕事で私は次のコマンドを試しました:

_xhost + home HOME_IP
ssh -X home
ssh -X HOME_IP
ssh -Y home
ssh -Y HOME_IP
_

私の_/etc/ssh/ssh_config_の仕事:

_Host *
ForwardX11 yes 
ForwardX11Trusted yes
_

私の_~/.ssh/config_の仕事:

_Host home
HostName HOME_IP
User azat
PreferredAuthentications password
ForwardX11 yes
_

私の_~/.Xauthority_の仕事:

_-rw------- 1 azat azat 269 Jun  7 11:25 .Xauthority
_

自宅の_~/.Xauthority_:

_-rw------- 1 azat azat 246 Jun  7 19:03 .Xauthority
_

しかし、動作しません

家にssh接続した後:

_$ echo $DISPLAY
localhost:10.0

$ kate
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
kate: cannot connect to X server localhost:10.0
_

私は自宅でiptablesを使用していますが、ポート22を許可しています。読んだ内容によると、これで十分です。

PD。 _-vvv_を使用

 ... 
 debug2:コールバック開始
 debug2:x11_get_proto:/ usr/bin/xauth list:0 2>/dev/null 
 debug1:X11を要求認証スプーフィングによる転送。
 debug2:チャネル1:リクエストx11-req confirm 1 
 debug2:client_session2_setup:id 1 
 debug2:fd 3 setting TCP_NODELAY 
 debug2:チャネル1:pty-req確認要求1 
 ... 

kateを起動しようとすると:

 debug1:client_input_channel_open:ctype x11 rchan 2 win 65536 max 16384 
 debug1:client_request_x11:request from 127.0.0.1 55486 
 debug2:fd 8 setting O_NONBLOCK 
 debug3: fd 8 is O_NONBLOCK 
 debug1:channel 2:new [x11] 
 debug1:confirm x11 
 debug2:X11 connection uses different authentication protocol。
 X11 connection rejected認証が間違っています。
 debug2:X11が2 i0/o0を拒否しました
 debug2:チャネル2:読み取りに失敗しました
 debug2:チャネル2:close_read 
 debug2:チャネル2: input open-> drain 
 debug2:channel 2:ibuf empty 
 debug2:channel 2:send eof 
 debug2:channel 2:input drain-> closed 
 debug2 :チャネル2:書き込みに失敗しました
デバッグ2:チャネル2:クローズ_書き込み
デバッグ2:チャネル2:出力オープン->クローズ
デバッグ2:X11クローズ2 i3/o3 
 debug2:チャネル2:クローズを送信
デバッグ2:チャネル2:rcvd close 
デバッグ2:チャネル2:停止中
デバッグ2:チャネル2:ガベージコレクションing 
 debug1:チャネル2:空き:x11、nchannels 3 
 debug3:チャネル2:ステータス:次の接続が開いています:
#1クライアントセッション(t4 r0 i0/0 o0/0 fd 5/6 cc -1)
#2 x11(t7 r2 i3/0 o3/0 fd 8/8 cc -1)
 
#同じ上記のように約7回繰り返します
 
 kate:Xサーバーに接続できませんlocalhost:10.0 
 

PD2 Linuxディストリビューションとバージョン番号を入力してください。
XのデフォルトのGNOMEまたはKDE環境、または自分でカスタマイズした何かを使用していますか?

 azat:〜$ kded4 -version 
 Qt:4.7.4 
 KDE開発プラットフォーム:4.6.5(4.6.5)
 KDEデーモン:$ Id $ 

端末ウィンドウからコマンドラインで直接sshを呼び出していますか?
どの端末を使用していますか? xterm、gnome-terminal、または?
X環境で実行されているターミナルをどのように起動しましたか?メニューから?ホットキー?または?

端末エミュレータ `yakuake`から
手動で` Ctrl + N`を押してコマンドを書きます

Ssh -Xが失敗したのと同じターミナルウィンドウからxeyesを実行できますか?

 `xeyes`-インストールされていません
しかし、` kate`または別のkdeアプリが実行されています

Xセッションにログインしているのと同じユーザーとしてsshコマンドを呼び出していますか?
_From the same user_

PD

sshソースもダウンロードし、debug2()を使用して、バージョンが異なると報告する理由を記述します
一部のCookieが表示され、そのうちの1つは空で、もう1つは_MIT-MAGIC-COOKIE-1_です

15
azat

Ssh X転送が機能しない理由は、_/etc/ssh/sshrc_構成ファイルがあるためです。

sshd(8)のmanページの最後には、

_~/.ssh/rc_が存在する場合は、それを実行します。それ以外の場合は、_/etc/ssh/sshrc_が存在する場合はそれを実行します。それ以外の場合はxauthを実行します

したがって、次のコマンドをサーバー側の_/etc/ssh/sshrc_(これもsshdのマニュアルページから)に追加します。

_if read proto cookie && [ -n "$DISPLAY" ]; then
        if [ `echo $DISPLAY | cut -c1-10` = 'localhost:' ]; then
                # X11UseLocalhost=yes
                echo add unix:`echo $DISPLAY |
                    cut -c11-` $proto $cookie
        else
                # X11UseLocalhost=no
                echo add $DISPLAY $proto $cookie
        fi | xauth -q -
fi
_

そしてそれはうまくいきます!

21
azat

Sshで問題が発生した場合は常に、-vオプションを指定してクライアントを実行し、他のユーザーが検査できるように出力を提供する必要があります。

ssh -v user@somewhere

問題はあなたのローカルシステムにあると思います。 sshコマンドをどのように呼び出しますか?シェルで手動で実行していますか?それともスクリプトの一部として実行されていますか?どちらの場合でも、ローカルシステムでDISPLAY環境が正しく設定されていることを確認する必要があります。また、リモート側でも正しく設定する必要がありますが、その値は、リモート側とローカル側で異なります

あなたが書いたものから、それはリモートホストで正しく設定されているようです(そして拡張によってX11転送はsshによって正しく設定されています)。リモートシステムには、次のものが含まれます。

$ echo $DISPLAY
localhost:10.0

ローカル側で何が表示されていますか?シェルにいる場合、値をエコーすることと、そのシェルからXアプリを起動することの両方で簡単に確認できるはずです...そのようなテストには、常に由緒あるxeyesを使用できます。もちろん! :)

一方、スクリプトからsshコマンドを呼び出すか、ホットキーにアタッチしている場合、期待した環境を継承しない可能性があるため、ローカル側のDISPLAY環境変数がまったく設定されていない可能性があります。

また、.Xauthorityファイルをいじっていたように思われるので、完全に削除してから、Xセッションからログアウトしてログインし直すと、自動的に再作成されます。あなたの.Xauthorityをいじくる必要はめったにないので、それを試しても、おそらく役に立たない絶望的な方法です。

ローカル側で確認する必要があるのは次のとおりです。

$ echo $DISPLAY
:0.0

適切に構成されたシステムでは、シェルを開いた場合、手動で設定する必要はありません。シェルを開始した環境から継承されるはずです。しかし、環境変数の継承を適切に処理しないウィンドウマネージャー/ホットキーの設定を見ました。シェルまたはスクリプトの起動に使用するgnome-sessionまたはkde-sessionを実行しているLinuxシステムがある場合、Xセッション環境変数は 継承に関するUbuntuのドキュメントに記載されているように)正しく設定されているはずです。環境変数の

親プロセスが子プロセスを作成するとき、たとえば、ターミナルから「gedit」コマンドを実行し、「bash」(親プロセス)が「gedit」(子プロセス)を作成するとき、子プロセスはすべての環境変数を継承し、親プロセスが持っていた値。

...

注:Gnomeグラフィカルデスクトップ環境では、gnome-sessionはデスクトップで実行されているすべてのプロセスの親プロセスです。この事実(継承の原則とともに)は、環境変数を使用してデスクトップの操作に強力に影響を与える能力の鍵です。 KDEでの同等のプロセスはkde-sessionです。

[〜#〜]更新[〜#〜]

ssh -vvvからの出力を投稿していただきありがとうございます。この場合、-vvv-vだけの冗長性が役立ちます。デバッグ出力から、X11転送が正しく設定されていることがわかります。

debug2: x11_get_proto: /usr/bin/xauth  list :0 2>/dev/null
debug1: Requesting X11 forwarding with authentication spoofing.
debug2: channel 1: request x11-req confirm 1

しかし、最初の行の:0は、sshを呼び出す方法のローカル側にまだ構成エラーがあると私に思わせます。多くのシステムでは、DISPLAYのデフォルト値は:0.0ではなく:0です。 sshコマンドを呼び出す前に、手動でDISPLAYの値を手動で設定していますか?

ローカルシステムの詳細と、sshコマンドを呼び出す方法については、この時点で役立ちます。

  • Linuxディストリビューションとバージョン番号を入力してください。
  • XのデフォルトのGNOMEまたはKDE環境、または自分でカスタマイズした何かを使用していますか?
  • 端末ウィンドウからコマンドラインで直接sshを呼び出していますか?
  • どの端末を使用していますか? xterm、gnome-terminal、または?
  • X環境で実行されているターミナルをどのように起動しましたか?メニューから?ホットキー?または?
  • ssh -Xが失敗したのと同じターミナルウィンドウからxeyesを実行できますか?
  • Xセッションにログインしているのと同じユーザーとしてsshコマンドを呼び出していますか?

この最後の項目は重要です。別のユーザーとしてsshを実行している場合(たとえば、ユーザーターミナルウィンドウではなくルートターミナルウィンドウを開いた場合)、DISPLAY=:0を明示的に設定している場合でも、この問題が発生します。デフォルトでは別のユーザーとして(たとえrootとしても)Xサーバーに接続する権限がありません!

2
aculich

設定は問題ないようですが、Agemenの提案に従って「ssh -X home」を試してください。

また、他のすべてが失敗した場合は、これを試してください:

職場から自宅のマシンにsshした後、「home」と入力します。

xauth list

次に、「仕事」で次のように入力します

xauth

「xauth>」プロンプトが表示されます。ここから「add」と入力し、「xauth list」の出力を一度に1行ずつコピーして貼り付けます(各行の先頭に「add」が付いています)。例えば:

someguy@work:~$ xauth
Using authority file /var/run/gdm/auth-for-someguy-4MYV85/database
xauth> add work/unix:0  MIT-MAGIC-COOKIE-1  781cc753194fd55ecdf6c4cf105c40e3
xauth> 

知らせて下さい。

1
DictatorBob