Ubuntu를 실행하는 컴퓨터가 있고 Fedora 14 컴퓨터에서 SSH를 통해 연결하고 있습니다. 그래픽 프로그램을 원격으로 실행할 수 있도록 X를 Ubuntu 시스템에서 Fedora로 다시 전달하고 싶습니다. 두 시스템 모두 LAN에 있습니다.
SSH에 X11 전달을 활성화하는 옵션이 있다는 것을 알고 있지만 -X
몇 가지 단계가 누락된 것 같습니다.
SSH를 통해 Ubuntu 시스템에서 Fedora로 X를 전달하는 데 필요한 단계는 무엇입니까?
답변1
X11 전달은 클라이언트 측과 서버 측 모두에서 활성화되어야 합니다.
우수한고객, (대문자 X) 옵션을 사용하면 X11 전달이 활성화됩니다. 다음을 사용하여 이를 기본값(모든 연결 또는 특정 연결에 대해)으로 설정할 -X
수 있습니다.ssh
ForwardX11 yes
~/.ssh/config
.
우수한서비스 터미널, X11Forwarding yes
에 지정해야 합니다./etc/ssh/sshd_config
. 기본 설정은 전달 없음(일부 배포에서는 기본적으로 설정됨 /etc/ssh/sshd_config
)이며 사용자는 이 설정을 재정의할 수 없습니다. 구성을 변경하는 경우, 예를 들어 service ssh reload
시스템이 systemd를 사용하는 경우 서버에 구성을 다시 로드하도록 지시해야 합니다 .
이 xauth
프로그램은 서버측에 설치되어야 합니다. X11 프로그램이 있다면 xauth
아마도 거기 있을 것입니다. xauth
비표준 위치에 설치하는 경우는 드물지만 전화를 통해 수행할 수 있습니다.~/.ssh/rc
(서버에서!).
서버에서는 환경 변수를 설정할 필요가 없습니다. 자동으로 적절한 값으로 설정됩니다 DISPLAY
. XAUTHORITY
ssh를 실행했지만 DISPLAY
설정되지 않은 경우 ssh가 X11 연결을 전달하지 않는다는 의미입니다.
Requesting X11 forwarding
ssh가 X11을 전달하고 있는지 확인하려면 포함 라인의 출력을 확인하세요 ssh -v -X
. 알아채다서버가 응답하지 않습니다어느 쪽이든 잠재적인 공격자로부터 세부 정보를 숨기는 것이 보안 예방 조치입니다.
답변2
SSH를 통해 X11 전달을 수행하려면 다음 세 가지 작업을 수행해야 합니다.
- 클라이언트는 X11을 전달하도록 설정되어야 합니다.
- X11 전달을 허용하도록 서버를 설정해야 합니다.
- 서버에서 X11 인증을 설정할 수 있어야 합니다.
DISPLAY
#1과 #2가 있지만 #3이 누락된 경우 빈 환경 변수가 생성됩니다 .
구체적으로 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
설치 하지 않으면empty DISPLAY environment variable
문제가 발생합니다.클라이언트에서 서버에 연결합니다. X11 전달을 허용하도록 ssh에 지시하십시오. 나는 선호한다
belden@skretting:~$ ssh -X blyman@the-server
하지만 당신은 좋아할 수도 있습니다
belden@skretting:~$ ssh -o ForwardX11=yes blyman@the-server
또는 에 추가할 수 있습니다 ~/.ssh/config
.
DISPLAY
오늘 오전에 제가 관리하지 않는 새 서버에 SSH로 접속할 때 이 빈 환경 변수를 만났습니다. 부족한 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.
새 터미널을 팝업하고 localhost
포트 에 SSH를 연결합니다 50505
.
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
마지막 세줄을 보세요. 나는 DISPLAY
그것을 설정하고 그 두 개의 아름다운 라인을 얻을 만큼 운이 좋았습니다 /usr/bin/xauth
.
/usr/bin/xauth
거기서부터는 my를 옆으로 옮기고 /usr/bin/xauth.old
연결을 끊고 ssh
중지한 sshd
다음 시작 sshd
하고 localhost로 돌아가는 ssh
간단한 문제였습니다 .
그것이 사라지면 내 환경에 반영되는 것을 /usr/bin/xauth
볼 수 없습니다 .DISPLAY
여기서는 흥미로운 일이 일어나지 않습니다. 대부분의 경우 나는 로컬 컴퓨터에서 이를 재현하기 위한 합리적인 접근 방식을 선택하는 행운을 누렸습니다.
답변3
확실하게 하다:
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)를 설치했습니다.
그런 다음 X11 전달에 SSH를 사용합니다.-X
당신 의ssh
다음과 같은 명령
ssh -v -X user@host
DISPLAY
그런 다음 귀하의 것이 맞는지 확인하십시오아니요삭제자:
echo $DISPLAY
그렇다면 -v
ssh()의 자세한 매개변수를 사용하고 경고가 있는지 확인하십시오.
debug1: No xauth program.
Warning: untrusted X11 forwarding setup failed: xauth key data not generated
당신이 가지고 있다면신뢰할 수 없는 X11그러면 위 그림과 같이-Y
표시 하려고대신(호스트를 신뢰하는 경우):
ssh -v -Y user@host
바라보다:-X를 ssh에 사용할 때 "경고: 신뢰할 수 없는 X11 전달 설정 실패: xauth 키 데이터가 생성되지 않음"은 무엇을 의미합니까?
당신이 가지고 있다면경고: xauth 데이터가 없습니다.Xauthority
, 다음과 같은 새 파일을 생성해 볼 수 있습니다 .
xauth generate :0 . trusted
xauth list
바라보다:새로운 .Xauthority 파일 생성/재구축
위와 다른 경고가 표시되는 경우 추가 단서를 따르십시오.
답변4
Windows 10에서 Ubuntu bash를 실행하여 ssh -X
원격 서버에서 GUI 환경을 확보하세요.
- 첫 번째
아래의 모든 것을 설치하십시오. Windows에서는 Xming
터미널에 install sudo apt install
을 사용하세요 ssh xauth xorg
.
sudo apt install ssh xauth xorg
- 두번째
ssh_config
파일이 포함된 폴더 로 이동하세요 /etc/ssh
. 내 파일은 .
- 제삼
ssh_config
관리자로 편집합니다( 사용 sudo
). 내부적으로 ssh_config
행의 해시가 제거되고 해당 매개변수가 로 설정됩니다.#
ForwardAgent
ForwardX11
ForwardX11Trusted
yes
# /etc/ssh/ssh_config
Host *
ForwardAgent yes
ForwardX11 yes
ForwardX11Trusted yes
- 앞으로
파일에서 이전 및 ssh_config
이전 해시를 제거하고 파일 끝에 새 줄을 추가하여 xauth 파일 위치를 선언합니다. xauth 파일 경로를 직접 작성해야 합니다.#
Port 22
Protocol 2
XauthLocation /usr/bin/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