Bagaimana cara menggunakan layar dan SSH secara efektif?


12

Saya ingin mengonfigurasi SSH dan layar sedemikian rupa sehingga info masuk akan selalu dipasang kembali ke sesi layar. Idealnya, sesi itu tidak akan berhenti tetapi lepas ketika saya menekan Cd. Bagaimana ini bisa dicapai? Dan pengaturan apa yang bermanfaat lainnya yang ada untuk membuat SSH-life saya lebih mudah?

Jawaban:


9

Saya hanya melakukan hal berikut untuk semua server saya sehingga ketika saya terhubung melalui SSH saya secara otomatis dimasukkan ke dalam sesi Layar.

Tambahkan berikut ini ke ~ / .bashrc untuk akun pengguna Anda:

# Auto-screen invocation. see: http://taint.org/wk/RemoteLoginAutoScreen
# if we're coming from a remote SSH connection, in an interactive session
# then automatically put us into a screen(1) session.   Only try once
# -- if $STARTED_SCREEN is set, don't try it again, to avoid looping
# if screen fails for some reason.
if [ "$PS1" != "" -a "${STARTED_SCREEN:-x}" = x -a "${SSH_TTY:-x}" != x ] 
then
  STARTED_SCREEN=1 ; export STARTED_SCREEN
  screen -RR -S main || echo "Screen failed! continuing with normal bash startup"
fi
# [end of auto-screen snippet]

Ini akan memulai sesi layar bernama utama jika tidak ada atau menyambungkan kembali jika ada. Ini dilakukan karena saya memiliki beberapa sesi layar lain yang berjalan terpisah untuk berbagai layanan dan tidak ingin terhubung ke mereka.


Saya hanya ingin menambahkan bahwa kombinasi tombol CTRL-d adalah layar standar untuk melepaskan diri dari sesi layar yang sedang berjalan.
Daemon of Chaos

8

Saya memiliki yang berikut ini di .bash_profile di server jarak jauh saya:

if [ -z "${STY}" -a -t 0 -a X${USER} = Xarcege ]; then
    reattach() {
        if [ -n "${SSH_AUTH_SOCK}" ]; then
            ln -snf "${SSH_AUTH_SOCK}" "${HOME}/.ssh/agent-script"
            SSH_AUTH_SOCK="${HOME}/.ssh/agent-script" export SSH_AUTH_SOCK
        fi
        exec screen -A -D -RR ${1:+"$@"}
    }
    screen -wipe
    echo 'starting screen... (type Ctrl-C to abort)'
    sleep 5 && reattach
fi

Ini melakukan dua hal: pertama, mengatur fungsi shell untuk mengganti shell dan meneruskan koneksi ssh-agent, kedua memanggil fungsi setelah jeda selama beberapa detik (jika Anda tidak ingin layar mulai).

ifKlausa pertama akan benar jika layar yang belum berjalan ( -z "${STY}") terpasang ke terminal ( -t 0) dan saya tidak menjalankan sudo (yang terkadang tidak berubah $USER).

The reattachFungsi pertama akan memeriksa apakah ssh disebut dengan port ssh-agent aktif ( -n "${SSH_AUTH_SOCK}"). Kemudian ia akan mengganti apa pun yang ada pada ~/.ssh/agent-scriptfile socket yang sedang aktif dan mengganti variabel environment ( $SSH_AUTH_SOCK) dengan nilai baru. Kemudian skrip akan mengganti shell saat ini dengan satu screensesi (pastikan hanya ada satu yang ada). Setiap argumen ke reattachfungsi diteruskan ke perintah ( ${1:+"$@"}).

Bagian terakhir pertama menghapus setiap sesi mati ( screen -wipe), membiarkan pengguna (saya) tahu bahwa layar akan segera dimulai dan sebaliknya dapat kembali ke shell dengan menekan Ctrl- C. Kemudian ia menunggu selama 5 detik dan memanggil reattachfungsi.


4

Pertama, jika Anda menggunakan byobu Anda dapat mengkonfigurasi sesi shell baru untuk selalu secara otomatis memulai byobu (yang pada dasarnya adalah konfigurasi layar yang bagus, meskipun versi yang lebih baru dapat menggunakan tmux sebagai backend). Jika Anda benar-benar tidak ingin byobu maka Anda mungkin dapat mengatur layar untuk terhubung secara manual dengan mengedit .profileskrip konfigurasi shell Anda atau exec screenjika TERM != "screen".

Jika tidak suka, Anda dapat menggunakan authorized_keysfile untuk menjalankan perintah khusus untuk koneksi dengan kunci tertentu (dan Anda dapat memiliki kunci sebanyak yang Anda suka). Lihat man sshddetailnya. Saya sarankan Anda membuat perintah menjalankan skrip yang memeriksa apakah layar berjalan dan terhubung, atau memulai sesi baru.

Adapun untuk memutuskan sambungan pada Ctrl-D, layar memungkinkan Anda untuk mengatur pemetaan kunci di Anda .screenrc. Lihat man screendetailnya. Anda sedang mencari "bindkey".


2

Mungkin sama sekali tidak relevan dengan pertanyaan Anda, tetapi pernahkah Anda mempertimbangkan untuk menggunakan TMUX? Itu banyak fungsi yang Anda cari di luar kotak.

Misalnya. jika Anda memutuskan sambungan dari sesi SSH ketika Anda berada di bawah TMUX, yang perlu Anda lakukan adalah ssh kembali dan menjalankan "tmux a" untuk melampirkan ke sesi Anda. Sejak saya mulai menggunakan TMUX, saya lupa apa perintah nohup / disown ... jika Anda perlu menjalankan sesuatu dan keluar - jalankan di dalam tmux dan lepas. Output perintah akan disangga, sehingga Anda dapat memeriksanya nanti.

untuk melampirkan secara otomatis Anda dapat menambahkan sesuatu seperti di bawah ini ke .bashrc:

[ -z $TMUX ] && tmux list-sessions 2>/dev/null && tmux a

atau bahkan lebih mudah

tmux a 2>/dev/null

Ini memiliki jejak memori yang lebih rendah dan keseluruhan IMHO jauh lebih baik / lebih mudah digunakan opsi.

Pintasan meta-d adalah pemetaan default untuk melepaskan TMUX.


0

screen -dAr default || screen -AS defaultbekerja untukku. Saya menambahkannya ke ~ / .bashrc saya .

Jelaskan secara singkat sakelar:

  • d - Lepaskan layar jika masih terpasang, dari sesi lain.
  • A - Sesuaikan jendela di layar dengan ukuran terminal baru.
  • r default - Pasang ke layar yang disebut default.

Jika perintah layar pertama (yang sebelumnya ||) tidak berhasil, yang kedua dijalankan:

  • A - Seperti dijelaskan di atas ...
  • S default- Buat sesi layar baru dengan nama default .

0

Saya sarankan menggunakan byobu . Alat ini menggunakan tmux dan menyediakan bilah alat yang bagus & fasilitas jendela lain yang nyaman, hotkeys dll.

echo "new-session" >> ~/.byobu/.tmux.conf
echo "if [ -n '\$TMUX' ]; then :; else byobu attach; fi" >> ~/.bashrc

Dengan perintah-perintah di atas setelah SSH berhasil masuk sistem dengan mencoba dan melampirkan sesi byobu-tmux yang ada, jika tidak maka akan membuat sesi baru.

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.