web-dev-qa-db-ja.com

SSH-Xアプリケーションをクライアントで実行するにはどうすればよいですか?

私はほとんどの人が抱えているように見える逆の問題を抱えています。 sshにログインしているときにXアプリケーションを起動すると、クライアント(ローカル)ではなくサーバー(ホスト)マシンに表示されます。これは私が使用するコマンドです

$ ssh -X -p 6623 [email protected]

$ DISPLAY変数がクライアント上で正しく表示されます。

$ echo $DISPLAY
:0

サーバーのXアプリケーションをクライアント(物理的に使用しているマシン)にローカルに表示したい。何が原因なのかわかりません。

4
Rucent88

この会話のために、lappyremoteyという名前の2台のマシンがあるとしましょう。 lappyシステムは、sshコマンドを実行する場所です。接続しているシステムはremoteyです。

1.リモートからのGUIをlappyに表示する

        lappy               .-,(  ),-.    
           __  _         .-(          )-.          remotey 
          [__]|=|  ---->(    network     )------> ____   __ 
          /::/|_|        '-(          ).-'       |    | |==|
                             '-.( ).-'           |____| |  |
                                                 /::::/ |__|

      NOTE: on lappy, `ssh` to remotey, run GUI, see GUI on lappy

シェルの構成ファイルは、環境変数DISPLAY=:0を設定している可能性があります。あなたは次のようにこれをgrepすることができます:

 $ grep DISPLAY $HOME/{.bash*,.profile*}

それでも何も返されない場合は、ログインしているシステムが原因である可能性があります。このディレクトリも覗いてみてください。

 $ grep DISPLAY /etc/profile.d/* /etc/bash*

これをそのままにしておきたい場合は、次のようにsshにXトラフィックをクライアントシステムにリダイレクトするように指示することで、この動作をオーバーライドできます。

$ ssh -X user@remoteserver

ここに、あなたと同じように$DISPLAY:0に設定されているリモートサーバーがあります。

$ ssh -X skinner "echo $DISPLAY"
:0

ただし、Xアプリケーションを呼び出して、sshコマンドを実行しているシステムにリモート表示することはできます。ログインする必要はありません。GUIを次のように直接実行できます。

$ ssh -X skinner xeyes

ボーナスのヒントとして、使用されている暗号を変更して、SSHトンネルを通過するX11トラフィックのパフォーマンスを向上させることができます。

$ ssh -c arcfour,blowfish-cbc -X skinner xeyes

2.リモートでのGUIの表示

        lappy               .-,(  ),-.    
           __  _         .-(          )-.          remotey 
          [__]|=|  ---->(    network     )------> ____   __ 
          /::/|_|        '-(          ).-'       |    | |==|
                             '-.( ).-'           |____| |  |
                                                 /::::/ |__|

      NOTE: on lappy, `ssh` to remotey, run GUI, see GUI on remotey

remoteyからlappyにSSHで接続しているが、GUIがlappyに表示されないようにしたい場合は、-Xスイッチをsshを呼び出します。

$ ssh -p 6623 [email protected]

3. $ HOME/.ssh/configを削除します

多くの場合、ユーザーの$HOME/.sshディレクトリは、何が起こっているのかについて不明な点をもたらす可能性があります。テストを実行するときのように、このディレクトリ内のconfigファイルの使用を一時的に停止できます。

$ ssh -F /dev/null -p 6623 [email protected]

4.リモートシェルの構成を削除する

次のテストを使用して、remotey上のシェルの構成ファイルを次のように一時的に無効にすることができます。

$ ssh -t -X -p 6623 [email protected] "bash --norc --noprofile"

上記では、どのセットアップもこのBashシェルに供給されないはずなので、DISPLAY=:0を設定してから、リモートのデスクトップにGUIを表示できるはずです。

最初に--noprofileを削除してこのコマンドを試すことにより、次のトリックを使用して問題を特定することができます。

$ ssh -t -X -p 6623 [email protected] "bash --norc"

次に、次のコマンドが続きます。

$ ssh -t -X -p 6623 [email protected] "bash --noprofile"

最初のバージョンでは、問題が構成ファイルの/etc/bashrc$HOME/.bashrcチェーンにあるかどうかがわかり、2番目のバージョンでは、問題が$HOME/.bash_profile構成ファイルにあるかどうかがわかります。

6
slm

ここでの重要な問題は、最後の行の:0です。

$ ssh -X -p 6623 [email protected]
$ echo $DISPLAY
:0

これは、sshdが設定した後、sshサーバー上の何かがDISPLAY環境変数をオーバーライドしていることを示しています。ディスプレイ:0でXサーバーが実行されているため、そのコンピューターでXクライアントが行う要求はすべてローカル(つまり、sshサーバー)Xサーバーに送信されます。別のディスプレイでssh-serverXサーバー(原文のまま!)を実行すると、次のようになります。

$ xclock
Error: Can't open display: :1

問題が発生する可能性のある場所はたくさんあります。まず、接続コマンドを変更して、初期化せずにシェルを呼び出すことをお勧めします。 -tオプションを使用して、ttyの割り当てを強制することを忘れないでください。 BASHの場合、コマンドは次のようになります。

$ ssh -X -p 6623 -t [email protected] /bin/bash --norc --noprofile 

次に、DISPLAYの値を確認します。

2
peterph