私はFedora 14マシンからSSHで接続するUbuntuを実行しているマシンを持っています。 XをUbuntuマシンからFedoraに転送して、グラフィカルプログラムをリモートで実行できるようにしたいと考えています。両方のマシンがLAN上にあります。
-X
オプションを使用すると、SSHでX11転送が有効になりますが、いくつかの手順が欠けているように感じます。
SSHを介してUbuntuマシンからFedoraにXを転送するために必要な手順は何ですか?
X11転送は、クライアント側とサーバー側の両方で有効にする必要があります。
クライアント側では、ssh
への-X
(大文字のX)オプションによりX11転送が有効になり、これを行うことができます ForwardX11 yes
の~/.ssh/config
を使用したデフォルト(すべての接続または特定の接続)。
サーバー側では、_ X11Forwarding yes
に/etc/ssh/sshd_config
を指定する必要があります。デフォルトは転送なし(一部のディストリビューションではデフォルトで/etc/ssh/sshd_config
をオンにする)であり、ユーザーはこの設定をオーバーライドできないことに注意してください。
xauth
プログラムはサーバー側にインストールする必要があります。そこにX11プログラムがある場合、xauth
が存在する可能性が非常に高くなります。まれなケースとして、xauth
が標準以外の場所にインストールされた場合は、 ~/.ssh/rc
(サーバー上!)から呼び出すことができます。
サーバーに環境変数を設定する必要はありません。 DISPLAY
とXAUTHORITY
は自動的に適切な値に設定されます。 sshを実行し、DISPLAY
が設定されていない場合、sshがX11接続を転送していないことを意味します。
SshがX11を転送していることを確認するには、Requesting X11 forwarding
出力にssh -v -X
を含む行を確認します。 サーバーはどちらの方法でも応答しないことに注意してください。これは、潜在的な攻撃者から詳細を隠すというセキュリティ上の予防策です。
Ssh経由でX11転送を機能させるには、3つのものが必要です。
#1と#2の両方があり、#3がない場合は、空のDISPLAY環境変数になります。
Soup-to-nuts、これがX11フォワーディングを機能させる方法です。
サーバーで、/ etc/ssh/sshd_configに以下が含まれていることを確認します。
X11Forwarding yes
X11DisplayOffset 10
これらの変更が反映されるように、sshdをSIGHUPする必要がある場合があります。
cat /var/run/sshd.pid | xargs kill -1
サーバーに、xauthがインストールされていることを確認してください。
belden@skretting:~$ which xauth
/usr/bin/xauth
Xauthがインストールされていない場合、「空のDISPLAY環境変数」の問題が発生します。
クライアントで、サーバーに接続します。 X11転送を許可するようにsshに指示してください。私は好む
belden@skretting:~$ ssh -X blyman@the-server
しかしあなたは好きかもしれません
belden@skretting:~$ ssh -o ForwardX11=yes blyman@the-server
または、これを〜/ .ssh/configで設定できます。
今日、私が管理していない新しいサーバーにsshを実行するときに、この空のDISPLAY環境変数に遭遇しました。欠落しているxauth部分を追跡するのは少し楽しかったです。これが私がやったこととあなたができることです。
私が管理者であるローカルワークステーションで、/ etc/ssh/sshd_configがX11を転送するように設定されていることを確認しました。 ssh -Xをlocalhostに戻すと、DISPLAYが正しく設定されます。
DISPLAYを強制的に設定解除することはそれほど難しくありませんでした。私はそれを正しく設定するためにsshdとsshが何をしていたかを観察する必要があるだけでした。ここに私が行ったすべての完全な出力があります。
blyman@skretting:~$ mkdir ~/dummy-sshd
blyman@skretting:~$ cp -r /etc/ssh/* ~/dummy-sshd/
cp: cannot open `/etc/ssh/ssh_Host_dsa_key' for reading: Permission denied
cp: cannot open `/etc/ssh/ssh_Host_rsa_key' for reading: Permission denied
Sudoを使用してssh_Host_ {dsa、rsa} _keyファイルを強制的にコピーする代わりに、ssh-keygenを使用して自分用にダミーのファイルを作成しました。
blyman@skretting:~$ ssh-keygen -t rsa -f ~/dummy-sshd/ssh_Host_rsa_key
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/blyman/dummy-sshd/ssh_Host_rsa_key.
Your public key has been saved in /home/blyman/dummy-sshd/ssh_Host_rsa_key.pub.
-t dsaを使用してすすぎと繰り返し:
blyman@skretting:~$ ssh-keygen -t dsa -f ~/dummy-sshd/ssh_Host_dsa_key
# I bet you can visually copy-paste the above output down here
〜/ dummy-sshd/sshd_configを編集して、正しい新しいssh_Hostキーファイルを指すようにします。
# before
blyman@skretting:~$ grep ssh_Host /home/blyman/dummy-sshd/sshd_config
HostKey /etc/ssh/ssh_Host_rsa_key
HostKey /etc/ssh/ssh_Host_dsa_key
# after
blyman@skretting:~$ grep ssh_Host /home/blyman/dummy-sshd/sshd_config
HostKey /home/blyman/dummy-sshd/ssh_Host_rsa_key
HostKey /home/blyman/dummy-sshd/ssh_Host_dsa_key
非分離モードで新しいポートでsshdを起動します。
blyman@skretting:~$ sshd -p 50505 -f ~/dummy-sshd/sshd_config -d
sshd re-exec requires execution with an absolute path
おっと、そのパスを正しく修正します。
blyman@skretting:~$ /usr/sbin/sshd -p 50505 -f ~/dummy-sshd/sshd_config -d
debug1: sshd version OpenSSH_5.5p1 Debian-4ubuntu6
debug1: read PEM private key done: type RSA
debug1: Checking blacklist file /usr/share/ssh/blacklist.RSA-2048
debug1: Checking blacklist file /etc/ssh/blacklist.RSA-2048
debug1: private Host key: #0 type 1 RSA
debug1: read PEM private key done: type DSA
debug1: Checking blacklist file /usr/share/ssh/blacklist.DSA-1024
debug1: Checking blacklist file /etc/ssh/blacklist.DSA-1024
debug1: private Host key: #1 type 2 DSA
debug1: setgroups() failed: Operation not permitted
debug1: rexec_argv[0]='/usr/sbin/sshd'
debug1: rexec_argv[1]='-p'
debug1: rexec_argv[2]='50505'
debug1: rexec_argv[3]='-f'
debug1: rexec_argv[4]='/home/blyman/dummy-sshd/sshd_config'
debug1: rexec_argv[5]='-d'
Set /proc/self/oom_adj from 0 to -17
debug1: Bind to port 50505 on 0.0.0.0.
Server listening on 0.0.0.0 port 50505.
debug1: Bind to port 50505 on ::.
Server listening on :: port 50505.
新しい端末をポップし、ポート50505のlocalhostにSSHで接続します。
blyman@skretting:~$ ssh -p 50505 localhost
The authenticity of Host '[localhost]:50505 ([::1]:50505)' can't be established.
RSA key fingerprint is 81:36:a5:ff:a3:5a:45:a6:90:d3:cc:54:6b:52:d0:61.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[localhost]:50505' (RSA) to the list of known hosts.
Linux skretting 2.6.35-32-generic #67-Ubuntu SMP Mon Mar 5 19:39:49 UTC 2012 x86_64 GNU/Linux
Ubuntu 10.10
Welcome to Ubuntu!
* Documentation: https://help.ubuntu.com/
1 package can be updated.
0 updates are security updates.
Last login: Thu Aug 16 15:41:58 2012 from 10.0.65.153
Environment:
LANG=en_US.UTF-8
USER=blyman
LOGNAME=blyman
HOME=/home/blyman
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
MAIL=/var/mail/blyman
Shell=/bin/bash
SSH_CLIENT=::1 43599 50505
SSH_CONNECTION=::1 43599 ::1 50505
SSH_TTY=/dev/pts/16
TERM=xterm
DISPLAY=localhost:10.0
Running /usr/bin/xauth remove unix:10.0
/usr/bin/xauth add unix:10.0 MIT-MAGIC-COOKIE-1 79aa9275ced418dd445d9798b115d393
そこの最後の3行を見てください。幸いにもDISPLAYが設定されていて、/ usr/bin/xauthから見栄えの良い2行がありました。
そこから、私の/ usr/bin/xauthを/usr/bin/xauth.oldに移動し、sshから切断してsshdを停止し、sshdとsshを起動してlocalhostに戻すのは子供の遊びでした。
/ usr/bin/xauthがなくなったとき、環境にDISPLAYが反映されていませんでした。
ここで素晴らしいことは何もありません。ほとんどの場合、私は自分のローカルマシンでこれを再現するための健全なアプローチを選択できました。
次のことを確認してください。
xauth
がインストールされました(参照:xauth info
/xauth list
)。サーバー上であなたの/etc/ssh/sshd_config
ファイルには次の行があります:
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost no
クライアント側では~/.ssh/config
ファイルには次の行があります:
Host *
ForwardAgent yes
ForwardX11 yes
クライアント側に、Xサーバーがインストールされています(例:macOS:XQuartz、Windows:Xming)。
次に、SSHを使用してX11転送を行うには、add -X
をssh
コマンドに追加します。
ssh -v -X user@Host
次に、あなたのDISPLAY
がないであることを確認します。
echo $DISPLAY
そうであれば、ssh(-v
)、警告などを確認します。
debug1: No xauth program.
Warning: untrusted X11 forwarding setup failed: xauth key data not generated
上記のようにuntrusted X11がある場合は、試してください-Y
flag代わりに(ホストを信頼する場合):
ssh -v -Y user@Host
参照: 「警告:信頼できないX11転送設定が失敗しました:xauthキーデータが生成されませんでした」とは、-Xでsshを実行することを意味します
警告が発生した場合:xauthデータがない場合は、新しい.Xauthority
ファイル、例:.
xauth generate :0 . trusted
xauth list
上記とは異なる警告が表示される場合は、さらに手がかりをたどってください。
修正は、この行を/etc/ssh/sshd_config
に追加することです:
X11UseLocalhost no
https://joshua.hoblitt.com/rtfm/2013/04/how_to_fix_x11_forwarding_request_failed_on_channel_0/
ssh -X
_を実行して、リモートサーバーでGUI環境を取得できるようにする以下をすべてインストールします。ウィンドウで、Xming
をインストールします。ターミナルのUbuntuでは、_Sudo apt install
_を使用して_ssh xauth xorg
_をインストールします。
_Sudo apt install ssh xauth xorg
_
_ssh_config
_ファイルを含むフォルダーに移動します。私のものは_/etc/ssh
_です。
管理者として_ssh_config
_を編集します(USE Sudo
)。 _ssh_config
_内で、ForwardAgent
、_#
_、_ForwardX11
_の行のハッシュ_ForwardX11Trusted
_を削除し、対応する引数をyes
に設定します。
_# /etc/ssh/ssh_config
Host *
ForwardAgent yes
ForwardX11 yes
ForwardX11Trusted yes
_
_ssh_config
_ファイルで、_#
_と_Port 22
_の前にあるフロントハッシュ_Protocol 2
_を削除し、ファイルの最後に新しい行を追加して、xauthファイルの場所を記述します_XauthLocation /usr/bin/xauth
_、xauthファイルの独自のパスを記述してください。
_# /etc/ssh/ssh_config
# IdentifyFile ...
Port 22
Protocol 2
# Cipher 3des
# ...
# ...
...
...
GSSAPIDelegateCredentials no
XauthLocation /usr/bin/xauth
_
これで_ssh_config
_ファイルの編集が完了したので、エディターを終了するときにファイルを保存します。次に、フォルダ_~
_または_$HOME
_に移動し、_export DISPLAY=localhost:0
_ファイルに_.bashrc
_を追加して保存します。
_# ~/.bashrc
...
...
export DISPLAY=localhost:0
_
あと少しで完了です。 bashシェルを再起動し、Xming
プログラムを開いて_ssh -X yourusername@yourhost
_を使用します。次に、GUI環境をお楽しみください。
_ssh -X yourusername@yourhost
_
問題はWindowsのUbuntuサブシステムにもあり、リンクは
https://Gist.github.com/DestinyOne/f236f71b9cdecd349507dfe90ebae776
追加 X11UseLocalhost no
〜/etc/ssh/sshd_config
とSSHサーバーを再起動します。
DISPLAYが表示されない場合は、xauthが正しくインストールされていることを確認してから、再試行してください。
RHE/CEntosにはこの問題はありません。これはUbuntuの問題です!
私にとっては、問題はnodev/tmpファイルシステムのマウントオプションにありました。 X11では、そこに作成する特殊ファイルが必要です。
そのために別のパーティションまたはディスクを使用する場合は、/ tmpファイルシステムのマウントオプションを確認してください。
以前の優れた回答に追加するには(~/.ssh/config
およびDISPLAY
環境変数がクライアントで設定されているかどうかを確認し、/etc/ssh/sshd_config
およびxauth
をサーバーにインストールします)、また、xterm
がクライアントにインストールされていることを確認します。
Sudo apt-get install xterm
xauth
はロックされる可能性があります。
-b This option indicates that xauth should attempt to break any authority file locks before proceeding. Use this
option only to clean up stale locks.
使用する
xauth -b
ssh
を使おうとしたマシンで、xauth
のロックを解除しました。 xauth -b
を発行した後にssh
セッションからログアウトし、再びログインすると、echo $DISPLAY
を正常に実行できました。 .Xauthority
を再作成する前に、ぜひお試しください
X11Forwarding
は、SSHサーバー(あなたの場合はUbuntuボックス)のsshd_config
に設定する必要があります。また、-X
オプションを使用するか、ssh_config
ファイルを編集してForwardX11
デフォルトを追加します。