เซิร์ฟเวอร์ระยะไกลการรวม iTerm2 และ tmux


30

ฉันต้องการเริ่มเซสชัน tmux บนเซิร์ฟเวอร์ระยะไกลจากนั้นใช้ windows พื้นเมืองและหน้าจอแยกของ iTerm2 บนเครื่องท้องถิ่นของฉัน

ตัวอย่างเช่นสมมติว่าเซิร์ฟเวอร์ระยะไกลของฉันมีเซสชัน tmux ที่รันด้วยหน้าต่างเดียวที่มีบานหน้าต่างสองบาน ใน iTerm2 บนเครื่องท้องถิ่นของฉันฉันต้องการบานหน้าต่าง iTerm2 ดั้งเดิมสองบานซึ่งแต่ละบานจะมีบานหน้าต่าง tmux ที่แตกต่างกัน

เป็นไปได้ไหม

(ฉันรู้ว่าการย้อนกลับเป็นไปได้ - โดยที่ฉันสามารถเรียกใช้เซสชั่น tmux ในเครื่องท้องถิ่นของฉันและเครื่องอื่นจะเห็นแท็บ iTerm2 ของฉันเป็น windows เช่น แต่ดูเหมือนจะไร้ประโยชน์)

คำตอบ:


40

ใช่มันเป็นไปได้ แต่ให้แน่ใจว่า:

  • หากต้องการติดตั้ง tmux เวอร์ชันล่าสุดจากระยะไกล
  • ติดตั้ง iterm2 เวอร์ชันล่าสุดไว้ในเครื่อง

เข้าสู่ระบบผ่านssh login@hostname -t 'tmux -CC'และvoilà - สิ่งนี้ควรเปิดหน้าต่าง iTerm2 บนกล่องภายในเครื่องของคุณที่ล็อกอินเข้าสู่กล่องระยะไกล


5
อย่าลืมที่จะเชื่อมต่ออีกครั้งเพื่อใช้ssh login@hostname -t 'tmux -CC attach'และดูในเมนู shell-> tmux-> dashboard ใน iterm2
therealmarv

1
เฮ้พวกคุณรู้วิธีใช้กับ mosh แทน ssh ไหม? แก้ไข: มันเป็นไปไม่ได้: github.com/mobile-shell/mosh/issues/640
fane89

1
หากคุณต้องการเชื่อมต่อและแนบกับเซสชันที่ระบุคุณสามารถใช้สิ่งต่อไปนี้:ssh login@hostname -t 'tmux -CC a -t sessionName'
Jeremy Iglehart

มีโอกาสที่จะทำให้การทำงานกับ autossh หรืออย่างใดทำให้ต้านทานตัดการเชื่อมต่อ?
igor

4

นี่คือสิ่งที่ใช้งานได้กับฉันด้วยเวอร์ชันรีลีสที่เสถียรตั้งแต่ 2015-12-16 ซึ่งเป็น iTerm 2.1.4 บน OS X 10.11.2 และ tmux 1.9 บน Raspbian Linux:

  1. ใช้งานครั้งแรก.ssh/configบนเครื่องโลคัลและ.ssh/authorized_keysบนเครื่องรีโมตของคุณเพื่อกำหนดค่าล็อกอินโดยไม่ใช้รหัสผ่านกับระบบรีโมต เมื่อกำหนดค่าเรียบร้อยแล้วคุณควรจะสามารถเข้าสู่ระบบได้โดยทำssh pi(สมมติว่าpiเป็นชื่อโฮสต์ของระบบรีโมตของคุณ)

  2. สร้างโปรไฟล์ iTerm2 ใหม่ซึ่งแทนที่จะเข้าสู่เชลล์ท้องถิ่นของคุณเพียงโทรssh piเข้าสู่เครื่องระยะไกล เพื่อกำหนดค่านี้ไป: การตั้งค่า / โปรไฟล์ / + / Command.Command = "ssh pi"

  3. เปิดหน้าต่าง iTerm2 ไปยังเครื่องระยะไกลผ่านโปรไฟล์ใหม่ของคุณโดยทำ: Profiles / Pi

  4. ในหน้าต่างเข้าสู่ระยะไกล iTerm2 tmux -CCที่บรรทัดคำสั่งทำ: หลังจากหน้าต่าง iTerm2 นี้แสดงโหมดคำสั่ง tmux tmux จะสร้างเซสชันใหม่และ iTerm2 จะสร้างหน้าต่าง iTerm2 ใหม่ทันทีสำหรับเซสชัน tmux นั้น ภายในหน้าต่าง iTerm2 ใหม่นั้นแท็บ iTerm2 เริ่มต้นจะแสดงหน้าต่าง tmuxเดียวของเซสชันนั้น หากคุณใช้ CMD-T สิ่งนี้จะสร้างแท็บ iTerm2 ใหม่แทนหน้าต่าง tmux ใหม่

คุณใช้สิ่งนี้อย่างไร

  • ณ จุดนี้คุณสามารถทำ "Shell / tmux / Dashboard" เพื่อสังเกตความเข้าใจของ iTerm2 เกี่ยวกับเซสชันและหน้าต่าง tmux ที่มีอยู่

  • หากคุณปิดหน้าต่าง iTerm2 ซึ่งเป็นตัวแทนของเซสชั่น tmux มันจะฆ่าเซสชั่นพื้นฐานและเป็นหน้าต่าง tmux ทั้งหมด

  • หากคุณปิดหน้าต่าง iTerm2 ที่แสดงโหมดคำสั่ง tmux ดูเหมือนว่าจะเป็นการฆ่าอินสแตนซ์ไคลเอ็นต์ tmux ที่เชื่อมต่อกับเซสชันนั้นดังนั้นทั้ง iTerm2 windows ของคุณจะหายไป แต่เซสชัน tmux ยังคงมีชีวิตอยู่และคุณสามารถเชื่อมต่อกับ มัน.

  • หากคุณต้องการแยกออกอย่างเป็นระเบียบมากขึ้นจาก tmux ให้ทำESCภายในหน้าต่างโหมดคำสั่ง tmux

  • ถ้าแทนการสร้างเซสชั่น tmux ใหม่สิ่งที่คุณต้องการ tmux -CC attachแต่เดิมเป็นที่จะแนบไปเซสชั่นที่มีอยู่แล้วคุณสามารถทำเช่นนั้นด้วย

ในทางทฤษฎีแล้วฉันคิดว่ามันควรจะมีวิธีการตั้งค่า iTerm2 หรือ tmux ดังนั้นเมื่อคุณเชื่อมต่อกับระบบรีโมตคุณจะเชื่อมต่อกับเซสชั่น tmux ใด ๆ ที่มีอยู่โดยอัตโนมัติ แต่ฉันไม่สามารถทำงานได้โดยการแก้ไขบรรทัดคำสั่ง โปรไฟล์ iTerm2


ในการเชื่อมต่อกับเซสชั่น tmux ที่กำลังรันอยู่โดยอัตโนมัติในการเข้าสู่ระบบ ssh ฉันใช้[[ $- == *i* && $SSH_TTY && -z $TMUX && ! -r ~/.notmux ]] && tmux attach-session && exitใน. bashrc (หรือบางอย่างที่ถูกเรียกจากที่นั่น) การทดสอบใช้สำหรับ: เชลล์แบบโต้ตอบ, เซสชัน ssh, ไม่ได้ทำงานใน tmux, ไม่มีเหตุฉุกเฉิน ไฟล์. exitในตอนท้ายปิดการเชื่อมต่อเมื่อออกจาก tmux (ส่วนใหญ่แยกออกสำหรับฉัน)
Zany
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.