รีโมต x-server ด้วย ssh -X


12

ฉันพยายามเริ่มเซสชัน gnome ระยะไกลโดยใช้: ssh -X username@192.168.1.107 gnome-session

ทั้งไคลเอนต์และเซิร์ฟเวอร์เป็น Ubuntu เวอร์ชั่น 12.04

ฉันได้รับต่อไปนี้ (และไม่มากเกิดขึ้น) ...

GNOME_KEYRING_CONTROL=/tmp/keyring-3aeNAh
GPG_AGENT_INFO=/tmp/keyring-3aeNAh/gpg:0:1
GNOME_KEYRING_PID=3573
GNOME_KEYRING_CONTROL=/tmp/keyring-3aeNAh
GPG_AGENT_INFO=/tmp/keyring-3aeNAh/gpg:0:1
GNOME_KEYRING_CONTROL=/tmp/keyring-3aeNAh
GPG_AGENT_INFO=/tmp/keyring-3aeNAh/gpg:0:1
SSH_AUTH_SOCK=/tmp/keyring-3aeNAh/ssh
GNOME_KEYRING_CONTROL=/tmp/keyring-3aeNAh
GPG_AGENT_INFO=/tmp/keyring-3aeNAh/gpg:0:1
SSH_AUTH_SOCK=/tmp/keyring-3aeNAh/ssh

(gnome-settings-daemon:3572): color-plugin-WARNING **: failed to get contents of /sys/class/dmi/id/board_version: Failed to open file '/sys/class/dmi/id/board_version': No such file or directory

** (gnome-settings-daemon:3572): WARNING **: You can only run one xsettings manager at a time; exiting

** (gnome-settings-daemon:3572): WARNING **: Unable to start xsettings manager: Could not initialize xsettings manager.
compiz (core) - Error: Screen 0 on display "localhost:10.0" already has a window manager; try using the --replace option to replace the current window manager.
Initializing nautilus-gdu extension
Created new window in existing browser session.
** Message: applet now removed from the notification area
** Message: using fallback from indicator to GtkStatusIcon

(gnome-settings-daemon:3572): keyboard-plugin-WARNING **: Failed to set the keyboard layouts: GDBus.Error:org.freedesktop.Accounts.Error.PermissionDenied: Not authorized

** (gnome-settings-daemon:3572): WARNING **: Failed to connect context: Connection refused

(gnome-settings-daemon:3572): clipboard-plugin-WARNING **: Clipboard manager is already running.

(gnome-settings-daemon:3572): color-plugin-WARNING **: failed to create device: GDBus.Error:org.freedesktop.ColorManager.Failed: failed to obtain org.freedesktop.color-manager.create-device auth

(gnome-settings-daemon:3572): color-plugin-WARNING **: GDBus.Error:org.freedesktop.ColorManager.Failed: failed to obtain org.freedesktop.color-manager.create-profile auth

(gnome-settings-daemon:3572): color-plugin-WARNING **: no xrandr-Samsung Electric Company-SAMSUNG device found: Failed to find output xrandr-Samsung Electric Company-SAMSUNG
Shutting down nautilus-gdu extension

** (gnome-settings-daemon:3572): WARNING **: Failed to connect context: Connection refused
Connection failure: Connection refused
pa_context_connect() failed: Connection refused

ฉันต้องการเข้าถึงเครื่อง Ubuntu ที่ใช้เป็นเซิร์ฟเวอร์สื่อ / เครื่องเล่นจากระยะไกลโดยไม่เปลี่ยนแปลงสิ่งที่เกิดขึ้นบนจอแสดงผลของเครื่องระยะไกล ฉันแค่อยากจะลองเล่นกับสิ่งนี้เพื่อดูว่ามันจะทำอะไรได้บ้าง :-)
benlad

1
หากคุณต้องการเล่นฉันป้อนคำตอบด้วยเคล็ดลับในการใช้ ssh พื้นฐานจาก commandline รวมถึงการสร้างคีย์และคัดลอกไปยังโฮสต์ระยะไกล เมื่อคุณเรียนรู้ที่จะใช้ ssh คุณอาจประหลาดใจที่สามารถใช้มันได้มากแค่ไหน
Marty ผัด

คำตอบ:


12

ฉันคิดว่าสิ่งที่คุณพยายามทำคือเริ่มเซสชัน Gnome ระยะไกลที่สมบูรณ์ซึ่งแสดงอยู่ในเครื่องของคุณ สิ่งนี้ล้มเหลวเนื่องจากคุณมีผู้จัดการเซสชันในเครื่องที่ควบคุมการแสดงเซิร์ฟเวอร์ X อยู่แล้ว

ตัวเลือกของคุณคือ:

  1. เพียงเริ่มต้นแอปพลิเคชันระยะไกลแต่ละตัวโดยใช้ ssh -X user@192.168.1.107 xclock

  2. สมมติว่า XDMCP เปิดใช้งานบนเครื่องระยะไกล ...

    2a ใช้Xnest -query 192.168.1.107 -geometry 1024x768 :1เพื่อเริ่มเซสชันการล็อกอินระยะไกลในหน้าต่างโลคัล

    2b ใช้Xephyr :1 -screen 1024x768 -query 192.168.1.107ซึ่งเป็นเซิร์ฟเวอร์ X ที่ดีกว่าXnest

  3. นอกจากนี้สมมติว่า XDMCP บนเครื่องระยะไกลกำหนดค่าเครื่องท้องถิ่นของคุณให้ใช้ตัวเลือก XDMCP แทนผู้เริ่มต้นมาตรฐานเมื่อเริ่มต้น

การเปิดใช้งาน XDMCP เป็นเพียงเรื่องของการวาง

[xdmcp]
Enable=true

ใน/etc/gdm/custom.confและรีสตาร์ทgdmหรือรีบูตเครื่อง (สมมติว่าคุณกำลังทำงานgdm)

หากคุณต้องการใช้งานแอปพลิเคชั่นระยะไกลเพียงอย่างเดียวตัวเลือก 1 นั้นง่ายที่สุดและยังคงใช้ทราฟฟิกที่เข้ารหัสของ SSH ซึ่งไม่มีโปรแกรมอื่นทำอยู่

หากคุณต้องการบางสิ่งที่ซับซ้อนกว่านั้น 2b (Xephyr) อาจจะดีกว่า แต่ฉันมักจะพบว่าการใช้เพียงssh -X ... &แอปพลิเคชันระยะไกลหลายรายการจะเพียงพอ

หากคุณกำลังทำทุกสิ่งจากระยะไกลนั่นคือเครื่องโลคอลเป็นเพียงเซิร์ฟเวอร์ดิสเพลย์และไม่ได้ทำสิ่งใดเลยคุณต้องพิจารณาใช้ตัวเลือก 3 เริ่มตัวเลือก XDMCP แทนการเข้าสู่ระบบมาตรฐาน


PS: ตามที่ระบุไว้ในความคิดเห็นทั้งสองXnestและXephyrเป็นแอพพลิเคชั่นที่จัดการกับโปรโตคอลเซิร์ฟเวอร์ X และใส่ทั้งเซสชันไว้ในหน้าต่าง Xnestใช้ฟังก์ชั่นที่ได้รับจากเซิร์ฟเวอร์ X ในพื้นที่ในขณะที่Xephyrจัดการกับโปรโตคอลเซิร์ฟเวอร์มากขึ้นเรื่อย ๆ ดังนั้นจึงมีประสิทธิภาพมากกว่า อาจไม่ได้ติดตั้งตามค่าเริ่มต้นเนื่องจากผู้ใช้โดยเฉลี่ยจะไม่ใช้


PPS: หลังจากคิดเล็กน้อยก็เห็นได้ชัดว่าวิธีการเข้ารหัสXephyrหรือXnestเซสชั่น ...

ssh -X username@192.168.1.107 Xephyr :1 -query localhost -screen 1280x1024

1
อาจเป็นประโยชน์ในการระบุสิ่งที่ Xnest / Xephyr ทำและทำไมเนื่องจากพวกเขาไม่ได้ติดตั้งโดยค่าเริ่มต้นฉันไม่คิด ฉันไม่เคยพบว่าจำเป็นต้องใช้ xdmcp ดังนั้นฉันจึงไม่ทราบเลย ฉันใช้วิssh -Yจากเทอร์มินัลจากนั้นเรียกใช้สิ่งที่ฉันต้องการจากที่นั่น
Marty ผัด

@MartyFried: ดูเหมือนว่าทั้งสองเป็นเซิร์ฟเวอร์ X ซึ่งสามารถทำงานในหน้าต่าง ดูเหมือนว่าผู้ใช้ต้องการส่งต่อเซสชั่น / จอแสดงผลทั้งหมด โดยส่วนตัวแล้วฉันแค่ใช้ VNC ซึ่งสร้างจอแสดงผลใหม่บนเซิร์ฟเวอร์ X ที่มีอยู่และช่วยตัวเองให้ปวดหัว
ish

@izx: ฉันเคยใช้ VNC ในอดีตสำหรับระบบ Windows แต่ด้วยระบบ Ubuntu สองตัวฉันมักจะชอบ ssh ในตัวแม้ว่าบางครั้งฉันก็สับสนเมื่อใช้แอพ GUI เพราะมันยากที่จะแยกแยะความแตกต่างระหว่างแอพแบบรีโมทและท้องถิ่น แต่สำหรับสิ่งที่ฉันทำ (ส่วนใหญ่แก้ไขจากหรือดูแลเซิร์ฟเวอร์) ดูเหมือนว่าจะทำงานได้ดีที่สุด
Marty ผัด

1
@MartyFried ข้อเสียของ VNC คือการที่คุณเพียงแค่ควบคุมการแสดงผลของเครื่องระยะไกล ดังนั้นคุณไม่สามารถมีผู้ใช้รายหนึ่งที่ลงชื่อเข้าใช้บนจอแสดงผลนั้นกับผู้ใช้อื่นที่เชื่อมต่อจากระยะไกล โซลูชัน XDMCP สร้างเซสชันแยกต่างหากอย่างสมบูรณ์ช่วยให้ผู้ใช้ 2 คนขึ้นไปใช้เครื่องเดียวกัน
StarNamer

โซลูชัน 2b ของคุณทำงานได้ดี ฉันลองรุ่น ssh แล้ว แต่มีปัญหาเกี่ยวกับปุ่ม ssh ข้อความยาวเกินกว่าจะโพสต์ได้ที่นี่ ฉันจะใช้วิธีที่ใช้งานได้ตอนนี้
benlad

0

ในกรณีที่คุณต้องการเรียนรู้การใช้ ssh มาตรฐานจากเทอร์มินัลฉันคิดว่าฉันจะให้ rundown อย่างรวดเร็วเนื่องจากคุณมีปัญหาในการใช้คีย์ ssh ดูเหมือน ข้อดีคือมันเป็นสากลมากขึ้นและมีความยืดหยุ่นมาก

ในการใช้คีย์ ssh ซึ่งมีความปลอดภัยมากขึ้นบางครั้งต้องใช้และสะดวกกว่าเนื่องจากคุณต้องป้อนรหัสเพียงครั้งเดียวคุณต้องทำสิ่งนี้เพียงครั้งเดียวสำหรับเซิร์ฟเวอร์ ssh จากระยะไกล:

สร้างคีย์ (สามารถใช้ dsa แทน rsa หากต้องการ)

ssh-keygen -t rsa    

โอนกุญแจไปยังรีโมตโฮสต์

ssh-copy-id <username>@<host>

ถ้าไม่ใช่พอร์ตมาตรฐาน 22 ให้ใช้สิ่งนี้: หมายเหตุอัญประกาศรอบอาร์กิวเมนต์

ssh-copy-id "<username>@<host> -p <port_nr>"

หากใช้ dsa จะมีคำสั่งแตกต่างออกไปเล็กน้อย -i <homedirectory>/.ssh/id_dsa

หลังจากนี้คุณจะต้องป้อนรหัสผ่านซึ่งจะแยกจากรหัสผ่านการเข้าสู่ระบบปกติของคุณ ไม่นานมานี้และฉันลืมลำดับที่แน่นอน แต่ควรชัดเจน จากนั้นในครั้งแรกที่คุณเชื่อมต่อคุณจะถูกถามรหัสผ่านนี้อีกครั้ง ฉันใช้ชื่อเข้าสู่ระบบเดียวกันดังนั้นฉันไม่จำเป็นต้องป้อนชื่อผู้ใช้ (ซึ่งจะถือว่าเหมือนกับชื่อผู้ใช้ระยะไกล) นอกจากนี้สำหรับเซิร์ฟเวอร์บน LAN ของคุณคุณสามารถป้อน ".local" แทนที่อยู่ IP ได้ฉันเชื่อ (ใช้งานได้สำหรับฉัน)

คุณสามารถติดตั้งระบบไฟล์ระยะไกลได้โดยใช้ sshfs (สมมติว่าติดตั้ง sshfs); แทนเส้นทางไดเรกทอรีสำหรับ local-mount-directory:

sshfs remote-host: local-mount-directory

(ยกเลิกการต่อเชื่อมโดยใช้fusermount -u local-mount-directory)

ฉันคิดว่ามันจะใช้ไดเรกทอรีบ้านของคุณเป็นค่าเริ่มต้นหากคุณออกจากไดเรกทอรีท้องถิ่น -mount `

การคัดลอกไฟล์สามารถทำได้ด้วย scp

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.