แนบเซสชัน tmux กับเครื่องรีโมต


31

ฉันใช้ tmux กับเครื่องของฉันและมักจะมีหลายครั้งพร้อมกัน

สิ่งที่ฉันมักจะทำคือฉันมีเซสชันที่มีหน้าต่างแตกต่างกันเพื่อทำงานในพื้นที่และเซสชันอื่น ๆ ที่ฉันเชื่อมต่อหลาย windows กับโฮสต์หนึ่งต่อเซสชัน

ต้นไม้เซสชั่น / หน้าต่างจะมีลักษณะเช่นนี้ในการใช้ชีวิตประจำวันฉันทำของ tmux:

(TMUX on my local machine)
 |
 +- session 1: local
 |  \_ window 1: local shell
 |  \_ window 2: local shell
 |  \_ ...
 |
 + session 2: somehost
 |  \_ window1: ssh user@somehost
 |  \_ window2: ssh user@somehost
 |  \_ ...
 |
 + session 3: someotherhost
    \_ window1: ssh user@someotherhost
    \_ window2: ssh user@someotherhost
    \_ ...

มีวิธีสร้างเซสชัน 2 และเซสชัน 3 บางเซสชันระยะไกลที่เชื่อมต่อกับเซสชัน tmux ที่สร้างใน somehost & someotherhost หรือไม่

ต้นไม้ด้านบนจะมีลักษณะเช่นนี้:

(TMUX on my local machine)
 |
 +- session 1: local
 |  \_ window 1: local shell
 |  \_ window 2: local shell
 |  \_ ...
 |
 + session 2 linked to an existing session on somehost
 |  \_ window1: shell on somehost
 |  \_ window2: shell on somehost
 |  \_ ...
 |
 + session 3 linked to an existing session on someotherhost
    \_ window1: shell on someotherhost
    \_ window2: shell on someotherhost
    \_ ...

ฉันพบหัวข้อนี้ แต่ฉันไม่แน่ใจว่านี่คือสิ่งที่ฉันต้องการทำ: การใช้ซ็อกเก็ต tmux ร่วมกันระหว่างโฮสต์เป็นไปได้หรือไม่

ฉันคิดว่าสิ่งที่ฉันกำลังมองหาจะต้องให้ฉันมีการกำหนดค่า tmux เดียวกันในเครื่องท้องถิ่นของฉัน somehost & someotherhost แต่ที่จะไม่เป็นปัญหา


คุณคิดวิธีแก้ปัญหาสำหรับสิ่งนี้หรือไม่? ฉันคิดว่าการมีเซสชันระยะไกลที่คุณสามารถจัดการได้เช่นเดียวกับในท้องถิ่นนั้นเป็นความคิดที่ดี แต่ดูเหมือนว่าคำตอบที่ได้รับการโหวตสูงสุดนั้นไม่ใช่คำถามของคุณจริง ๆ
mbigras

คำตอบ:


18

คุณสามารถส่งคำสั่งไปยัง ssh เมื่อเชื่อมต่อกับโฮสต์ระยะไกล รวม-tตัวเลือกด้วยtmux attach-sessionเพื่อเชื่อมต่อกับเซสชัน tmux ระยะไกล:

ssh <remote host> -t tmux attach-session

โพสต์นี้เกี่ยวกับการแนบไปกับเซสชั่น tmux ผ่าน sshอธิบายในรายละเอียดเพิ่มเติม


18
สิ่งนี้ไม่เพียงให้เซสชั่นซ้อนกันหรือไม่ ฉันเชื่อว่าสิ่งที่ OP พยายามทำคือให้เซสชันระยะไกลปรากฏขึ้นพร้อมกับเซสชันท้องถิ่นเพื่อให้พวกเขาสามารถนำทางภายในเลือกหน้าต่าง / ต้นไม้เลือกของ tmux
stsquad

หากมีมากกว่าหนึ่งเซสชันที่เชื่อมต่อกับรีโมตโฮสต์คุณสามารถใช้: ssh <remote host> -t tmux a -t <session-name>
user1757247

ฉันทำการแก้ไขเพื่อแก้ไขปัญหาที่ฉันพบและทีละขั้นตอน หวังว่าการตรวจสอบโดยเพื่อนจะเสร็จในไม่ช้า วิธีนี้ใช้ได้ผลssh <remote host> -t /path/to/tmux a -t <my-session-name>ต้องเพิ่ม-t
Merlin

ฉันมีคำถามเดียวกันกับ OP นี่ไม่ตอบคำถามของฉัน มันสร้างเซสชั่น tmux ซ้อนกันที่ฉันต้องหลบหนีสองคำสั่ง tmux ทั้งหมดที่ฉันต้องการส่งไปยังเซสชั่นที่ ฉันต้องการบางสิ่งที่เซสชันระยะไกลปรากฏขึ้นในรายการเซสชั่นของฉันเช่นเดียวกับเซสชันท้องถิ่น
Omnifarious

2

หากปัญหาหลักของคุณคือคุณต้องพิมพ์ssh remotehostทุกครั้งที่คุณเปิดหน้าต่างใหม่default-commandตัวเลือกเซสชันอาจเป็นวิธีแก้ปัญหา

มันจะดำเนินการคำสั่งที่คุณระบุโดยอัตโนมัติเมื่อคุณเปิดหน้าต่างใหม่ในเซสชันที่คุณตั้งไว้

การตั้งค่าง่าย ๆ ใน.tmux.conf:

bind-key C-r new-session ssh remotehost \; set-option default-command "ssh remotehost"

การเชื่อมโยงคีย์นี้Ctrl-rจะสร้างเซสชันใหม่ที่ทุกหน้าต่างที่เพิ่งเปิดใหม่จะดำเนินการssh remotehostในนามของคุณก่อน

คุณสามารถเลือกโฮสต์เพื่อเชื่อมต่อในเวลาที่สร้างเซสชันด้วยการตั้งค่าด้านล่าง:

bind-key C-r command-prompt "new-session -s %1 ssh %1 \; set-option default-command \"ssh %1\""

อันนี้ขอให้คุณโฮสต์ที่คุณต้องการsshในการสร้างแต่ละเซสชั่น (ไม่ใช่ที่การสร้างหน้าต่างแต่ละครั้ง) และเริ่มเซสชั่นที่ทุ่มเทให้กับโฮสต์นั้น

ต้องใช้เวลาเล็กน้อยในการดำเนินการหลายอย่างsshหากคุณเปิดใช้งานมัลติเพล็กซิ่ง SSH ในการกำหนดค่า ssh .ssh/configตัวอย่างด้านล่าง:

Host remotehost
    ControlMaster auto
    ControlPath ~/.ssh/mux-%r@%h:%p
    ControlPersist 10

โปรดทราบว่าการตั้งค่า tmux นี้ไม่ได้สร้างเซสชัน tmux ในโฮสต์ระยะไกล หากการเชื่อมต่อ ssh ขาดหายหน้าต่าง tmux ที่ได้รับผลกระทบจะไม่กลับมา


1

คุณสามารถใช้เครื่องมือเช่น socat เพื่อทำ tunnel ซ็อกเก็ตโดเมน unix ที่ใช้โดย tmux กับเครื่องโลคัลของคุณ แต่คุณเพียงแค่แลกเปลี่ยนอุโมงค์ (ssh) กับอีกรายการหนึ่ง (socat) ดังนั้นจึงไม่ได้ดีกว่าและไม่ปลอดภัย


อาจจะขุดอุโมงค์socatผ่านssh? 🙂
รอบรู้

ณ จุดนี้tmateอาจเป็นเครื่องมือที่ดีที่สุดสำหรับการจัดการ tmux จากระยะไกล
จนถึง

0

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

คุณสามารถบอกสิ่งที่ชอบ:

"เฮ้ แต่ไม่มีทางที่จะมีหลาย windows สำหรับเซิร์ฟเวอร์ระยะไกลแต่ละเครื่อง!"

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

นอกจากนี้ฉันขอแนะนำให้คุณใช้tmuxinatorมันเป็นเครื่องมือที่มีประโยชน์มากถ้าคุณแก้ไขเซสชั่น tmux ของคุณอย่างน้อยทุกวัน

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