Server jarak jauh, iTerm2, dan integrasi tmux


30

Saya ingin dapat memulai sesi tmux pada server jauh, dan kemudian menggunakan windows asli iTerm2 dan membagi layar pada mesin lokal saya.

Sebagai contoh, katakanlah server jarak jauh saya memiliki sesi tmux berjalan dengan satu jendela yang memiliki dua panel. Di iTerm2 di mesin lokal saya, saya ingin dua panel asli iTerm2 sehingga setiap panel berisi panel tmux yang berbeda.

Apakah ini mungkin?

(Saya tahu kebalikannya adalah mungkin - di mana saya dapat menjalankan sesi tmux pada mesin lokal saya dan mesin lain akan melihat tab iTerm2 saya sebagai windows misalnya. Tapi ini sepertinya tidak berguna.)

Jawaban:


40

Ya itu mungkin, tetapi pastikan:

  • Untuk menginstal tmux versi terbaru dari jarak jauh
  • Apakah versi terbaru dari iterm2 diinstal secara lokal

Login via ssh login@hostname -t 'tmux -CC'dan voila - ini akan membuka jendela iTerm2 pada kotak lokal Anda yang masuk ke kotak remote.


5
juga jangan lupa menghubungkan kembali untuk menggunakan ssh login@hostname -t 'tmux -CC attach'dan melihat ke menu dash-> tmux-> dashboard di iterm2.
therealmarv

1
hei, apakah kalian tahu bagaimana melakukannya dengan mosh bukannya ssh? sunting: tidak mungkin: github.com/mobile-shell/mosh/issues/640
fane89

1
Jika Anda ingin terhubung dan melampirkan ke sesi tertentu, Anda dapat menggunakan yang berikut:ssh login@hostname -t 'tmux -CC a -t sessionName'
Jeremy Iglehart

setiap kesempatan untuk membuatnya bekerja dengan autossh atau entah bagaimana membuatnya menolak terputus?
igor

4

Inilah yang bekerja untuk saya, dengan versi rilis stabil pada 2015-12-16, yaitu iTerm 2.1.4 pada OS X 10.11.2 dan tmux 1.9 pada Raspbian Linux:

  1. Pertama kali digunakan .ssh/configpada mesin lokal Anda dan .ssh/authorized_keyspada mesin jarak jauh Anda untuk mengonfigurasi login tanpa kata sandi ke sistem jarak jauh. Setelah ini dikonfigurasi dengan benar, Anda harus dapat login hanya dengan melakukan ssh pi(seandainya piadalah nama host dari sistem remote Anda).

  2. Buat profil iTerm2 baru yang, alih-alih melakukan login ke shell lokal Anda, hanya panggilan ssh piuntuk masuk ke mesin jarak jauh. Untuk mengonfigurasi ini, buka: Preferensi / Profil / + / Command.Command = "ssh pi"

  3. Buka jendela iTerm2 ke mesin jarak jauh melalui profil baru Anda, dengan melakukan: Profil / Pi.

  4. Dalam iTerm2 jendela remote login, pada baris perintah lakukan: tmux -CC. Setelah ini, jendela iTerm2 Anda menunjukkan mode perintah tmux, tmux membuat sesi baru, dan iTerm2 segera membuat jendela iTerm2 baru untuk sesi tmux itu. Di dalam jendela iTerm2 baru itu, tab iTerm2 awal mewakili jendela tmux tunggal sesi itu. Jika Anda melakukan CMD-T, ini akan membuat tab iTerm2 baru, mewakili jendela tmux baru.

Bagaimana Anda menggunakan ini?

  • Pada titik ini Anda dapat melakukan "Shell / tmux / Dashboard" untuk mengamati pemahaman iTerm2 tentang sesi dan jendela tmux yang ada.

  • Jika Anda menutup jendela iTerm2 yang mewakili sesi tmux, itu membunuh sesi yang mendasarinya dan semua jendela tmux itu.

  • Jika Anda menutup jendela iTerm2 yang menunjukkan mode perintah tmux, maka tampaknya hanya membunuh instance klien tmux yang terhubung ke sesi itu, sehingga kedua jendela iTerm2 Anda hilang, tetapi sesi tmux masih hidup dan Anda dapat melampirkan kembali ke saya t.

  • Jika Anda ingin pelepasan yang lebih teratur dari tmux, maka lakukan saja ESCdi jendela mode perintah tmux.

  • Jika alih-alih membuat sesi tmux baru, yang Anda inginkan awalnya adalah melampirkan ke sesi yang ada, maka Anda bisa melakukannya dengan tmux -CC attach.

Secara teori, saya pikir harus ada cara untuk mengkonfigurasi iTerm2 atau tmux sehingga ketika Anda terhubung ke sistem jarak jauh Anda secara otomatis dilampirkan ke sesi tmux yang ada, tetapi saya tidak dapat membuatnya berfungsi dengan memodifikasi baris perintah di profil iTerm2.


Untuk terhubung secara otomatis ke sesi tmux yang sedang berjalan pada ssh login saya gunakan [[ $- == *i* && $SSH_TTY && -z $TMUX && ! -r ~/.notmux ]] && tmux attach-session && exitdi .bashrc (atau sesuatu yang dipanggil dari sana) Tes untuk: shell interaktif, sesi ssh, belum berjalan di tmux, tidak ada keadaan darurat-jangan-lakukan-itu mengajukan. Pada exitakhirnya menutup koneksi setelah keluar tmux (sebagian besar untuk saya).
zany
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.