web-dev-qa-db-ja.com

sshログインでx11ディスプレイが機能しないのはなぜですか?

リモートサーバーにログインし、xアプリケーション(Firefoxなど)を表示しようとしています。エラーメッセージが表示されます。以下はFirefoxを開こうとする私の試みです

Black@Black-PC ~
$ ssh -X kwagjj@$labserver -p 122
[kwagjj@James5 ~]$ firefox
Error: no display specified
[kwagjj@James5 ~]$ exit
logout
Connection to 143.248.146.204 closed.

Black@Black-PC ~
$ ssh -Y kwagjj@$labserver -p 122
[kwagjj@James5 ~]$ firefox
Error: no display specified
[kwagjj@James5 ~]$ 

-X、-Yを使用したのは、これらの2つのオプションがX11に関する資格情報に関連しており、これらのスイッチが私のために機能することを読んだためです。 -X、-Yスイッチなしでも、私の試みは失敗しました。

「表示が指定されていません」というエラーはどういう意味ですか?

追伸奇妙なことに、PuTTYを介してリモートサーバーに接続し、コマンド「firefox」を繰り返し実行すると、動作しますか?!?!(firefoxはローカルコンピューターに表示されます)

追伸私のローカルコンピューターはWindows 7なので、Xmingをバックグラウンドで実行してX11ディスプレイを許可します。上部に書かれた試みに関しては、コマンドはCygwinターミナルで入力されました。

22
kwagjj

Cygwin-environmentにDISPLAY変数が設定されていることを確認してください:

export DISPLAY=:0.0

sSHで接続した後、そのシェルが正しいDISPLAY変数も知っているかどうかを確認します。

echo $DISPLAY
16
jensd

ヘッドレスRHEL7サーバーへの接続でこの問題に遭遇しました。

DISPLAY変数を設定して適切に認証するには、ホストにxorg-x11-xauthパッケージをインストールする必要があります。

誰かを救ったことを願っています。

19
Mike S

@ jensd、@ unxnutに感謝します。あなたのコメントに基づいて、私は問題を理解することができました。

ソリューションには2つのステップが必要です。

  1. dISPLAY変数は適切に設定する必要があります。
  2. リモートサーバーにsshするときは、-Xスイッチをオンにする必要があります。

私の以前の試みでは、これら2つの条件の一方または両方が欠けています。

とにかく、これを見る後のユーザーのために、ここに私が言おうとしていることを示す例があります。

ケース1

私のローカルマシンにはDISPLAY変数が設定されていません。次に、-Xスイッチを使用してリモートサーバーにsshし、xclockを実行してみます。

Black@Black-PC ~
$ echo $DISPLAY

## the blank means that DISPLAY variable has not been specified##
Black@Black-PC ~
$ ssh -X kwagjj@$labserver -p 122
Last login: Tue Jun 24 22:23:13 2014 from 
[kwagjj@James5 ~]$ xclock
Error: Can't open display:
[kwagjj@James5 ~]$ setenv | grep $DISPLAY
DISPLAY: Undefined variable.

ご覧のとおり、エラーError: Can't open display:がリモートサーバーターミナルに表示されます。

ケース2

今回は、ローカルマシンでDISPLAY変数を指定します。しかし、sshを実行しているときは、-Xスイッチをオンにしません。結果は失敗になります:

Black@Black-PC ~
$ export DISPLAY=:0.0

Black@Black-PC ~
$ echo $DISPLAY
:0.0

Black@Black-PC ~
$ ssh kwagjj@$labserver -p 122
Last login: Tue Jun 24 22:33:32 2014 from 
[kwagjj@James5 ~]$ xclock
Error: Can't open display:
[kwagjj@James5 ~]$ setenv | grep DISPLAY
[kwagjj@James5 ~]$ 

最初に、DISPLAY変数を適切に設定したことがわかります。しかしそれでも、(-Xスイッチなしで)sshした後、xclockは実行されません。

* setenv | grep DISPLAYを使用した別の結果はこちらで確認できます(case1と比較してください)。ケース2では、結果は空白になります。一方、このコマンドラインのcase1の結果はDISPLAY: undefined variable....です。この違いがどのように発生するのかはわかりませんが、次のいずれかを満たしているかどうかに関係していると思います。条件1.または2。

ケース3

今回は、ローカルマシンでDISPLAY変数を適切に指定し、-XスイッチをオンにしてリモートサーバーにSSHで接続します。

Black@Black-PC ~
$ echo $DISPLAY
:0.0

Black@Black-PC ~
$ ssh -X kwagjj@$labserver -p 122
Warning: untrusted X11 forwarding setup failed: xauth key data not generated
Warning: No xauth data; using fake authentication data for X11 forwarding.
Last login: Tue Jun 24 22:37:27 2014 from 
[kwagjj@James5 ~]$ xclock &
[1] 9174
[kwagjj@James5 ~]$ setenv | grep DISPLAY
DISPLAY=localhost:11.0
[kwagjj@James5 ~]$

この設定で、xclockは機能します!!ここに私が嘘をついていないことを証明するスクリーンショットがあります。 enter image description here xclockは私のローカルマシンで正常に表示されます。

この場合も、setenv | grep DISPLAYの結果を確認してください。現在はDISPLAY=localhost:11.0と表示されています。私が知っていることから、これは.XauthorityファイルのMIT-MAGIC-COOKIEに関連していますが、これについてはあまり知らないので、これ以上は説明しません。

結論:上記の3つのケースから、リモートXウィンドウが正しく表示されるためには、1。ローカルマシンのDISPLAY変数と2. ssh -Xスイッチの両方が適切に設定されている必要があることが確認できます。もちろん、リモートサーバーはX11転送を許可する必要があります。

8
kwagjj

Ssh -Xを使用した場合でも、sshがDISPLAY変数設定の引き継ぎを拒否する別のケースに遭遇しました。

$ ssh -X foo
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE Host IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
...
...
Add correct Host key in /home/jdoe/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/jdoe/.ssh/known_hosts:71
Password authentication is disabled to avoid man-in-the-middle attacks.
Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks.
X11 forwarding is disabled to avoid man-in-the-middle attacks.

Sshがあなたに吐き出すメッセージ全体を読む人なら、答えはすぐにわかります。ただし、あなたが私のようなもので、リモートサーバーにsshしたときに表示される非常に長いメッセージを常に読むとは限りません。システム管理者は、ログに記録するたびに、すでに長いMOTD(今日のメッセージ)または同様の警告バナーを設定しているためです。システムに入ると、簡単にそのメッセージを見逃す可能性があります。

もちろん、(実際にシステムにログインしていることを確認したら、((= /// =)!!)、「known_hosts」ファイルを編集して、ログイン中にあなた(I)が非常に注意深く無視したという有用な警告メッセージ。ネットワークまたはシステム管理者が数か月ごとにネットワークを再構成する必要性を感じている場合(ジョブのセキュリティ?)、この状況に遭遇することがあります。

0
Ogre Psalm33