私は自宅と職場のコンピューターを持っていますが、自宅のコンピューターには静的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
_です
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
_
そしてそれはうまくいきます!
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コマンドを呼び出す方法については、この時点で役立ちます。
ssh -X
が失敗したのと同じターミナルウィンドウからxeyes
を実行できますか?この最後の項目は重要です。別のユーザーとしてsshを実行している場合(たとえば、ユーザーターミナルウィンドウではなくルートターミナルウィンドウを開いた場合)、DISPLAY=:0
を明示的に設定している場合でも、この問題が発生します。デフォルトでは別のユーザーとして(たとえrootとしても)Xサーバーに接続する権限がありません!
設定は問題ないようですが、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>
知らせて下さい。