SSH X11が機能しない


15

自宅と職場のコンピューターがあり、自宅のコンピューターには静的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を許可しています。読んだ内容によると、これで十分です。

UPD。-vvv

...
debug2:コールバックの開始
debug2:x11_get_proto:/ usr / bin / xauth list:0 2> / dev / null
debug1:認証スプーフィングによるX11転送の要求。
debug2:チャネル1:要求x11-req確認1
debug2:client_session2_setup:id 1
debug2:fd 3設定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:127.0.0.1 55486からのリクエスト
debug2:fd 8設定O_NONBLOCK
debug3:fd 8はO_NONBLOCKです
debug1:チャンネル2:新しい[x11]
debug1:x11を確認
debug2:X11接続は異なる認証プロトコルを使用します。
誤った認証のためにX11接続が拒否されました。
debug2:X11は2 i0 / o0を拒否しました
debug2:チャネル2:読み取りに失敗しました
debug2:チャネル2:close_read
debug2:チャネル2:入力オープン->ドレイン
debug2:チャネル2:ibuf empty
debug2:チャネル2:eofを送信
debug2:チャネル2:入力ドレイン->クローズ
debug2:チャネル2:書き込みに失敗しました
debug2:チャネル2:close_write
debug2:チャネル2:出力が開いている->閉じている
debug2:X11は2 i3 / o3を閉じました
debug2:チャネル2:クローズ送信
debug2:チャネル2:rcvd close
debug2:チャネル2:デッド
debug2:チャネル2:ガベージコレクション
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回繰り返す

ケイト:Xサーバーlocalhost:10.0に接続できません

UPD2 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環境で実行している端末をどのように起動しましたか?メニューから?ホットキー?または?

ターミナルエミュレータ「やくあけ」から
手動で「Ctrl + N」を押してコマンドを書く

ssh -Xが失敗するのと同じ端末ウィンドウからxeyesを実行できますか?

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

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

UPD3

またssh、ソースをダウンロードしdebug2()、バージョンが異なる
ことを報告する理由を書いて使用しますMIT-MAGIC-COOKIE-1

回答:


21

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

sshd(8)マニュアルページの最後には次のように記載されています。

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

その/etc/ssh/sshrcため、サーバー側で(sshdのmanページからも)次のコマンドを追加します。

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

そしてそれは動作します!


クライアント側またはサーバー側でそれを行いますか?
アルフォンス

サーバー側。(の/ etc / SSH / SSHRCクライアントが接続されているときに実行)
azat

2

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

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

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

...

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

更新しました

からの出力を投稿していただきありがとうございますssh -vvv。この場合、-vvvvs からの余分な冗長性-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、ありません:0DISPLAYsshコマンドを呼び出す前に、何らかの方法で自分で手動で値を設定していますか?

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

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

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


質問の本文を更新
-azat

これをさらにデバッグするための詳細情報を求める新しい更新セクションを追加しました。
-aculich

Iドンt set DISPLAY`のてmanualy。実際X -nolisten、ローカルマシン上で動作しないため、なぜ機能しないのか理解できていると思います
-azat

-nolistenこの問題とは関係ありません。Xに関する限り、Xはリモートssh接続について何も知りません。Xにとっては、他のローカルプログラムのように見えます。
aculich

1
sshd問題がサーバー側にある場合に備えて、さらに冗長にフォアグラウンドで開始することもできます。
0xC0000022L

1

あなたの設定は大丈夫のようですが、Agemenが示唆したように「ssh -X home」を試してください。

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

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

xauth list

次に、「work」に次のように入力します

xauth

これにより、「xauth>」プロンプトが表示されます。ここから「add」と入力し、「xauthリスト」の出力を一度に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> 

私たちに知らせて。


私はすでに試しましたssh -X home(ポストに書き込みます)。xauthについては明日試してみます。
アザット

私は試しますxauth list & xauth addが、まだ動作しません
-azat

xauth add azat/unix:10 MIT-MAGIC-COOKIE-1 ad01c582768c832ff591277b27863bc7($ DISPLAY = localhost:10.0のため)でこのレコードを追加しました。これが役立つ場合は
-azat

-1

リモートアプリをローカルディスプレイに表示するか(work)、またはリモートシステムに表示するか()が明確にわかりませんhome

最初のケースでは、ssh -X hostxhostを使用する必要はなく、十分であると思います。

2番目の場合、xhostを使用する必要があるシステムはhomeであり、それだけでは不十分です。表示変数もエクスポートする必要があります。

xhost +work
export DISPLAY=:0.0

私はあなたが何をしたいのか完全にはわかりません...そして、私はあなたのシステムと私のものの間に存在する違いを知らないので、一方であなたのケースに必要な正確な構成(私はスペシャリストではありません^ _ ^)。これも私にとってはうまく機能しているので、何らかの形であなたの助けになることを願っています。


私はすでに試しましたssh -X home(ポストに書き込みます)。はい、ローカルディスプレイにリモートアプリを表示します。
アザット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.