Server terminal untuk admin; Tidak ada celah SSH tunggal



Jika pekerjaan Anda mengharuskan menyimpan banyak sesi SSH ke server yang berbeda, Anda mungkin tahu bagaimana sesi tersebut mudah rusak saat beralih ke Wi-Fi lain atau ketika Internet untuk sementara hilang. Tetapi bagaimana jika saya memberi tahu Anda bahwa semua masalah ini telah lama diselesaikan dan Anda dapat melupakan sesi yang rusak dan koneksi ulang yang konstan?

Membuka tutup laptop, semua lusinan sesi SSH saya segera dapat diakses dan dalam kondisi yang sama ketika saya meninggalkannya. Artikel ini menjelaskan cara mengkonfigurasi server terminal untuk administrator sistem. Menggunakan server semacam itu memungkinkan Anda untuk melupakan sesi SSH yang rusak, terus-menerus menyambung kembali dan memasukkan kata sandi.



Pengaturan server


Idenya sederhana dan diilustrasikan dengan jelas dalam gambar di judul posting: kami akan menyimpan semua koneksi SSH pada server terminal khusus. Server ini akan menjadi titik masuk kami untuk mengelola server lain. Pada saat yang sama, server akhir tidak perlu mengkonfigurasi atau menginstal perangkat lunak tambahan.
Hampir semua konfigurasi cocok untuk server terminal, tetapi lebih baik memiliki lebih banyak RAM untuk menyimpan log konsol di dalam setiap sesi dan untuk dapat menggulir ke atas sejarah setiap saat dan melihat apa yang Anda lakukan pada server sesi sebulan yang lalu. Biasanya memori 1-2GB sudah cukup.

Pilihan distribusi


Di server terminal, yang paling penting adalah uptime, karena semakin jarang kita reboot, semakin banyak sesi SSH kita hidup. Oleh karena itu, kami memilih distribusi LTS (Dukungan Jangka Panjang) yang paling konservatif, misalnya, cabang debian atau ubuntu yang stabil. Kami mengonfigurasi pembaruan otomatis (pembaruan tanpa pengawasan) sehingga memulai ulang program secara mendadak bukanlah kejutan.

Penyiapan server SSH


Karena server terminal akan membuka akses ke semua server kami sekaligus, akan aman untuk mengamankannya. Untuk melakukan ini, kami melarang otentikasi dengan kata sandi, hanya menyisakan akses dengan kunci, dan kami juga melarang masuk sebagai root.
Pertama, Anda perlu membuat pengguna baru di sistem.

/ etc / ssh / sshd_config
..... #    root PermitRootLogin no #   ,   ChallengeResponseAuthentication no #   ,   PAM   UsePAM no .... 

Konfigurasi semacam itu cukup untuk melindungi dari penghitungan kata sandi massal, karena server SSH hanya akan menutup koneksi ketika mencoba masuk dengan kata sandi. Bahkan dengan sejumlah besar koneksi, mereka akan menutup dengan cukup cepat tanpa membuat beban signifikan pada server. Menurut pendapat saya, dengan konfigurasi ini tidak perlu menginstal fitur keamanan tambahan seperti fail2ban.

Seringkali, administrator pemula dalam manual mereka menyarankan untuk mengubah port SSH dan menginstal beberapa jenis yang tidak standar seperti 2222 bukannya 22 . Menurut pendapat saya ini adalah praktik buruk yang tidak menambah keamanan apa pun.

  • Ini tidak akan memungkinkan Anda untuk melindungi diri dari peretasan kata sandi, karena pemindai otomatis masih akan menemukan SSH pada port apa pun dan mulai memalu.
  • Ini membuat berantakan jika beberapa orang mengelola sistem dan masing-masing menciptakan porta sendiri. Ketika ada lusinan sistem seperti itu, Anda harus mencari pemindai tempat port SSH disembunyikan kali ini.
  • Ini melanggar batasan keamanan bawaan dalam program. Misalnya, browser web tidak akan terhubung ke port 22 jika Anda secara eksplisit menentukannya di HTTP, tetapi pada saat yang sama terhubung ke port non-standar lainnya. Ini dapat digunakan untuk memicu sistem IDS / IPS DDoS.



Tmux - satu jendela untuk mengatur semua


Tmux adalah program yang sangat nyaman untuk mengelola terminal virtual, yang tanpanya saya tidak bisa membayangkan pekerjaan saya. Pada awalnya itu tampak membingungkan dan rumit, tetapi jika Anda mengalahkan diri sendiri dan belajar bagaimana menggunakannya, Anda tidak bisa lagi menolaknya.

Bagi mereka yang tidak tahu apa itu tmux, bayangkan sebuah browser web tab, tetapi bukannya situs ada sesi konsol. Anda dapat membuka jumlah tab tak terbatas dan di setiap tab jalankan program Anda. Pada saat yang sama, itu berjalan di server, dan Anda dapat memutuskan sambungan kapan saja, sementara semua tab dan program yang berjalan akan tetap di tempatnya dan Anda dapat kembali ke sana.

Instal tmux jika belum diinstal:
 apt install tmux 

Dalam terminologi tmux, satu set jendela terpisah disebut sesi. Kami hanya akan menggunakan satu sesi secara default, oleh karena itu kami tidak akan menggunakan nama sesi sama sekali. Tetapi penting untuk mengetahui bahwa mungkin ada lebih dari satu jika perlu.

Buat sesi baru:
 tmux new 

Saat ini, kami membuat sesi baru dengan satu jendela dan langsung terhubung. Anda dapat melihat bilah status hijau yang muncul di bawah. Ini adalah sesuatu seperti bilah tab di browser. Ini akan menampilkan tab saat ini dan tetangga, serta pesan layanan.

Bilah status tmux menampilkan nama-nama jendela (tab)
Pada titik ini, bahkan jika kita menutup koneksi SSH dan menyambung kembali ke server, sesi tmux kami yang berjalan akan tetap dalam kondisi yang sama, bersama dengan semua program yang berjalan, seolah-olah kami meminimalkannya. Mari kita coba jalankan program teratas di dalam sesi tmux dan putuskan sambungannya. Untuk kejelasan, tutup jendela terminal sepenuhnya dan sambungkan kembali ke server.

Setelah tersambung kembali ke server, kami akan terhubung ke sesi kami yang sebelumnya diluncurkan:
 tmux attach 

Dan pastikan bahwa program yang berjalan paling atas terus bekerja. Pada titik ini, penting untuk memahami prinsip utama: setelah memulai sesi tmux, tetap bekerja di latar belakang pada server, terlepas dari apakah Anda terhubung atau tidak.

Karena sesi tmux memungkinkan beberapa koneksi simultan, ini dapat digunakan untuk kolaborasi beberapa orang di server untuk melihat konsol yang sama secara real time. Untuk melakukan ini, semua orang terhubung ke server yang sama di bawah akun yang sama dan masukkan tmux attach. Di sana Anda dapat mengobrol, tepat di baris perintah. Kami sering menggunakan ini agar tidak saling melemparkan log konsol di messenger, tetapi untuk segera bekerja pada satu terminal.


Tmux dapat membagi jendela menjadi beberapa (setiap jendela di dalam tab disebut pane), ini nyaman ketika Anda perlu melihat dua konsol sekaligus. Misalnya, di satu jendela, edit skrip, dan di jendela lain, lihat log.

tmux memungkinkan Anda membuat banyak jendela di dalam satu dan mengubah ukurannya

Secara default, Ctrl + b digunakan untuk mengontrol tmux. Setelah menekan hotkey kontrol ini, tmux berharap untuk memasukkan perintah utama dari satu huruf.

Berikut adalah perintah dasar:
Ctrl + b + c - (buat) Buat jendela baru (tab)
Ctrl + b + <digit> - Pindah ke nomor tab N, di mana digit adalah kunci dari 0 hingga 9. Penomoran jendela dimulai dari nol.
Ctrl + b + x - tutup jendela saat ini. Jika jendela terakhir ditutup, sesi tmux akan berakhir.
Ctrl + b + w - menampilkan daftar semua jendela yang dapat Anda naik dan turun dengan tombol kursor dan pilih yang diinginkan dengan menekan enter.
Ctrl + b + " - pisahkan jendela menjadi dua secara horizontal dan buat yang baru
Ctrl + b +% - pisahkan jendela secara vertikal dan buat yang baru
Ctrl + b +, - ganti nama jendela saat ini
Ctrl + b + bawah / atas / kiri / kanan - bergerak melalui pane'am di dalam jendela
Ctrl + b + halaman atas / halaman bawah - gulir ke atas
Ctrl + b + / - cari berdasarkan sejarah, seperti dalam vim atau kurang

Ini semua hotkey yang saya butuhkan selama 10 tahun menggunakan tmux. Sebenarnya, ada banyak lagi, tetapi untuk permulaan lebih baik memikirkannya.

Konfigurasi Tmux


Saya menemukan tombol pintas Ctrl + b tidak nyaman, karena terlalu banyak menekan tiga tombol untuk tindakan apa pun. Tema konfigurasi tmux adalah bidang selera yang terpisah, dan setiap pengguna berpengalaman memiliki visi sendiri tentang cara menggunakannya dengan benar dan nyaman. Bahkan ada seluruh pilihan konfigurasi dan tema untuk tmux dari seluruh penulis.

Sebagai permulaan, saya akan memberikan contoh konfigurasi saya, yang menurut saya, memperbaiki semua kesulitan yang mencegah perkembangan pesat tmux. Config terletak di folder home dengan nama ~ / .tmux.conf

 #  ctrl+b    .   macbook        set-option -g prefix ` #     <`>  `+a bind-key a send-prefix #       set -g base-index 1 set-option -g base-index 1 setw -g pane-base-index 1 # Lowers the delay time between the prefix key and other keys - fixes pausing in vim set-option -sg escape-time 1 #     1000 .      set -g history-limit 1000 #    # default statusbar colors set-option -g status-fg white set-option -g status-bg default # default window title colors set-window-option -g window-status-fg default set-window-option -g window-status-bg default #        #------------------ # Respawn windows when PANE IS DEAD bind-key R respawn-window #   default   local new -d -s default -n local #     irc   irssi neww -d -n irc irssi #     superserver   ssh root@superserver.com neww -d -n superserver ssh root@superserver.com #     anotherserver   ssh root@123.123.123.123 neww -d -n superserver anotherserver root@123.123.123.123 


Konfigurasi ini memungkinkan Anda untuk membuat banyak jendela secara otomatis saat startup, di mana sesi SSH segera dimulai. Dalam hal ini, tidak perlu secara manual membuat sesi baru dengan perintah baru tmux , cukup untuk selalu memasukkan tmux attach . Jika sesi itu tidak ada sebelumnya, itu akan dibuat.

Autostart tmux


Kami ingin bahwa ketika terhubung ke server terminal, kami segera masuk ke tmux, bahkan jika server reboot dan sesi tmux ditutup.

Untuk melakukan ini, tambahkan tmux di akhir file ~ / .bashrc . Penting untuk diingat bahwa desain seperti itu hanya akan bekerja dengan konfigurasi di atas.
 if [ ! "$TMUX" ]; then tmux attach fi if [ "$TMUX" ]; then export TERM=screen fi 


Kondisi sederhana ini berarti bahwa jika kita tidak cocok, maka kita terhubung dengannya.

Ini melengkapi konfigurasi tmux pada server terminal. Mulai sekarang, untuk setiap koneksi SSH baru kami akan membuat jendela terpisah di tmux. Dan bahkan jika koneksi ke server terminal terputus, semua koneksi SSH akan tetap aktif.

Mosh - No More Breaks


Sekarang kita perlu menyediakan koneksi terus menerus ke server terminal, yang akan selalu aktif. Bahkan jika kita menutup laptop selama beberapa hari dan membukanya di jaringan wifi lain, koneksi harus dipulihkan sendiri.

Mosh adalah add-on dari server OpenSSH biasa, yang memungkinkan Anda untuk melupakan pemutusan. Mosh log in menggunakan SSH biasa, setelah itu saluran UDP terpisah dinaikkan, yang langsung dikembalikan setelah istirahat, bahkan jika alamat IP eksternal Anda diubah.
Karena kita perlu menjaga koneksi konstan ke server terminal, kita akan menginstal mosh hanya di server dan di komputer kita yang bekerja. Pada saat yang sama, Anda tidak perlu menginstal apa pun di server jauh, karena koneksi ke mereka sudah hidup selamanya di tmux.

Pasang mosh di server:
 apt install mosh 


Instal mosh di komputer kami yang berfungsi. Ini tersedia untuk semua sistem operasi utama, tetapi klien asli hanya untuk sistem operasi mirip Unix. Versi Windows diimplementasikan menggunakan Cygwin atau aplikasi Chrome.

Saya menggunakan macOS dan menginstal mosh melalui manajer paket minuman:
 brew install mosh 


Dalam kebanyakan kasus, mosh tidak memerlukan konfigurasi tambahan dan berfungsi langsung di luar kotak. Cukup menulis mosh daripada perintah ssh:
 mosh user@my-server.com 


Untuk konfigurasi non-standar, perintahnya terlihat sedikit lebih rumit. Misalnya, jika Anda perlu menentukan port dan jalur kunci:

 mosh --ssh="ssh -p 2222 -i /path/to/ssh.key" user@my-server.com 


Mosh melakukan otentikasi primer sebagai klien SSH biasa, yang memberi otorisasi ke port standar 22. Pada saat yang sama, server mosh pada awalnya tidak mendengarkan port apa pun, dan terlepas dari daemon OpenSSH yang asli, tidak ada port yang terbuka di server. Setelah terhubung melalui TCP, mosh berjalan di server di ruang pengguna dan membuka terowongan tambahan melalui UDP.


Diagram alir protokol Mosh

Sekarang sesi mosh yang berjalan pada klien akan selalu dipulihkan ketika Internet muncul. Di laptop saya, saya tetap membuka satu sesi mosh selama berbulan-bulan tanpa memulai ulang dan saya tidak harus terus-menerus masuk ke server terminal lagi, itu selalu berfungsi.

Agar tidak memasukkan perintah koneksi panjang ke server terminal setiap kali, saya membuat alias dari perintah koneksi dari satu huruf:

 alias t='mosh --ssh="ssh -p 443 -i /path/to/ssh.key" user@my-server.com' 


Kesimpulan



Skema sederhana ini memungkinkan Anda menghemat waktu dan saraf secara signifikan, bukan untuk kehilangan hasil kerja ketika SSH rusak. Saya selalu harus melihat bagaimana admin pemula mulai masuk ke server mereka setiap waktu dan membunuh sesi SSH lengket.
Sekilas mungkin tampak membingungkan, tetapi saya meyakinkan Anda bahwa setelah Anda mengalahkan diri sendiri dan terbiasa, Anda akan mulai melihat dengan penyesalan merendahkan mereka yang masih memiliki koneksi SSH yang terputus.



Berlangganan pengembang Instagram kami


Source: https://habr.com/ru/post/id472746/


All Articles