Pada artikel ini, kita akan membahas trik dan perintah yang berguna saat bekerja dengan SSH. Yaitu:
- Cara menggunakan otentikasi dua faktor untuk koneksi SSH.
- Penggunaan yang aman dari "agen penerusan".
- Mengakhiri sesi yang digantung.
- Kami membiarkan terminal terbuka saat keluar atau memutuskan hubungan.
- ( Zoom!).
Ada lima cara untuk mengaktifkannya.
1. Kami memperbarui OpenSSH dan menggunakan token perangkat keras. Pada bulan Februari tahun ini, dukungan untuk token FIDO U2F (Universal Second Factor) telah ditambahkan ke OpenSSH. Apa yang bisa saya katakan - itu bagus, tetapi ada satu peringatan.
Intinya adalah pembaruan menambahkan jenis kunci baru untuk mendukung token. Namun, fitur ini hanya dapat digunakan saat memperbarui klien dan server ke versi 8.2 atau yang lebih baru. Anda dapat memeriksa versi klien saat ini dengan menggunakan perintah ssh -V. Sejauh menyangkut server jarak jauh, ada baiknya menggunakan nc [namaserver] 22.
Selain itu, dua jenis kunci baru telah ditambahkan - ecdsa-sk dan ed25519-sk. Ada juga sertifikat untuk mereka. Untuk membuat file kunci, Anda perlu memasukkan token dan menjalankan perintah
$ ssh-keygen -t ecdsa-sk -f ~ / .ssh / id_ecdsa_sk.
Apa yang dia lakukan? Membuat kunci publik dan pribadi yang terikat ke token U2F. Kunci pribadi pada token digunakan untuk mendekripsi kunci pribadi yang disimpan di disk.
Kemungkinan lain adalah mengatur kata sandi untuk file kunci sebagai faktor kedua. Faktanya adalah bahwa OpenSSH bekerja dengan opsi generasi lain - sk. Dengan demikian, file kunci disimpan pada token perangkat keras dan selalu bersama Anda. Untuk membuat kunci residen, Anda perlu menggunakan perintah:
$ ssh-keygen -t ecdsa-sk -O resident -f ~/.ssh/id_ecdsa_sk.
Nah, untuk mentransfer file kunci ke mesin baru, Anda perlu memasukkan media dan menjalankan perintah $ ssh-add -K. Ingat - token harus diaktifkan setelah koneksi.
2. Kami menggunakan PIV + PKCS11 dan Yubikey. Jika Anda perlu terhubung ke mesin tempat versi server SSH sebelumnya diinstal, ada opsi lain. Berikut adalah instruksi rinci untuk U2F + SSH dengan PIV / PKCS11 . Agak rumit tapi sepadan.
3. Cara ketiga adalah menggunakan yubikey-agent. Ini adalah agen SSH untuk Yubikey itu sendiri , dibuat oleh Filipo Valsorda.
4. Sentuh ID dan sekey. Cara lain adalah dengan menggunakan Sekey- agen open source. Ini menyimpan kunci pribadi dalam sistem kantong aman untuk MacOS dan memungkinkan Anda memicu fitur tanda tangan dengan Touch ID.
5. Terakhir, menggunakan Single Sign On SSH. Berikut adalah instruksi penyiapannya. Keuntungan Single Sign On SSH adalah bahwa pengguna dapat menegakkan kebijakan keamanan penyedia akun, termasuk dukungan untuk otentikasi multi-faktor.
Penerusan kunci aman (penerusan agen)
Untuk apa penerusan kunci digunakan? Untuk akses host jarak jauh ke agen pengguna SSH lokal. Faktanya adalah ketika klien SSH menggunakan penerusan kunci (ssh -A paling sering diaktifkan), maka selama koneksi ada 2 saluran. Yang pertama adalah sesi pengguna interaktif, yang kedua adalah saluran penerusan kunci.
Agen SSH lokal membuat soket IPC yang terhubung melalui saluran ini ke host jarak jauh. Ini cukup berbahaya, karena pengguna root pada host jarak jauh memiliki akses ke agen SSH lokal dari pengguna yang menghubungkan. Dengan demikian, ini dapat digunakan untuk mengakses sumber daya jaringan atas nama pengguna ini. Dan jika Anda bekerja dengan agen SSH standar, Anda tidak akan mengetahui masalahnya. Tetapi dengan kunci U2F atau Sekey, masalah ini dapat dihilangkan.
Secara umum, Anda dapat meneruskan kunci, tetapi disarankan untuk tidak sering menggunakan metode ini dan untuk semua koneksi Anda. Dianjurkan untuk menggunakannya hanya jika pengguna yakin akan situasinya.
Keluar dari sesi SSH yang digantung
Sesi SSH sering macet karena masalah jaringan, kehilangan kendali atas program yang sedang berjalan, atau salah satu urutan keluar dari terminal yang memblokir input keyboard. Ada beberapa cara untuk keluar dari sesi yang digantung:
1. Secara otomatis ketika jaringan terputus. Untuk melakukan ini, tambahkan ke file konfigurasi SSH, .ssh / config:
ServerAliveInterval 5
ServerAliveCountMax 1
Dalam hal ini, ssh akan memeriksa koneksi dengan mengirimkan permintaan echo ke host jarak jauh secara berkala. Mereka ditetapkan oleh parameter ServerAliveInterval. Jika ada lebih banyak permintaan yang tidak terjawab daripada ServerAliveCountMax, SSH menutup koneksi.
2. Memutus sesi. ssh menggunakan karakter ~ sebagai urutan escape default. Perintah ~ menutup koneksi saat ini dan kembali ke terminal.
Juga, ~? Menampilkan seluruh daftar perintah yang dapat digunakan dalam sesi saat ini. Jika Anda memiliki beberapa tata letak yang diinstal, Anda harus menekan tombol ~ dua kali untuk mengirim karakter.
Membiarkan terminal pada host jarak jauh terbuka
Ada dua opsi untuk menyimpan sesi saat beralih antar jaringan.
1. Menggunakan Mosh atau Eternal Terminal
Jika Anda membutuhkan koneksi yang dapat diandalkan dan tidak menutup, bahkan saat berpindah antar jaringan, maka ada jalan keluar - Anda perlu menggunakan Mosh - mobile shell. Mosh mengacu pada shell aman yang menggunakan SSH untuk menginisialisasi sesi (jabat tangan). Setelah itu, dia beralih ke saluran terenkripsi miliknya sendiri, yang sangat stabil. Misalnya, ia dapat menangani berbagai situasi, termasuk pemutusan sambungan, perubahan alamat IP perangkat, keterlambatan besar dalam transfer data, dan sebagainya. Ini semua berkat UDP dan protokol sinkronisasi yang digunakan Mosh.
Untuk bekerja dengannya, pertama-tama, Anda perlu menginstalnya di server dan klien, membuka port 60000 hingga 61000 untuk lalu lintas UDP yang masuk di host jarak jauh Anda. Setelah itu, Anda tinggal mengetik mosh user @ server untuk terhubung.
Mosh bekerja pada level layar terminal dan penekanan tombol, yang memberikan banyak keuntungan dibandingkan SSH, yang mentransfer aliran data biner dari I / O normal antara klien dan server. Jika Anda hanya perlu menyinkronkan layar terminal dan penekanan tombol, maka koneksi yang terputus dipulihkan lebih cepat. SSH yang sama perlu disimpan dalam buffer dan dikirim semuanya, tetapi Mosh hanya perlu menyimpan penekanan tombol, menyinkronkan status terakhir jendela terminal dengan klien.
2. Menggunakan tmux. Untuk menghubungkan dan memutuskan sambungan sesuai kebutuhan, sambil mempertahankan sesi yang sama pada host jarak jauh, ada baiknya menggunakan multiplekser terminal yang disebut tmux . Jika koneksi SSH terputus, Anda perlu menghubungkan kembali dan mengetik tmux attach. Pengguna kemudian kembali ke sesi tmux.
Ia juga menawarkan beberapa fitur tambahan, termasuk tab, panel, sama seperti di terminal macOS, ditambah kemampuan untuk bekerja dengan terminal bersama dengan pengguna lain. Anda bisa mendapatkan lebih banyak lagi dengan Byobu, sebuah paket yang menambahkan banyak fungsi yang nyaman dan pintasan keyboard. Ini dikirimkan dengan Ubuntu dan dapat dijalankan di macOS dengan Homebrew.
Berbagi terminal jarak jauh
Ada situasi ketika Anda perlu berbagi sesi SSH - misalnya, saat menyelesaikan masalah kompleks dengan server. Cara terbaik untuk melakukannya adalah dengan tmux. Untuk mengatasi masalah tersebut, Anda perlu melakukan hal berikut:
- Pastikan tmux diinstal pada server di DMZ (atau lokasi yang ingin Anda sambungkan).
- Kedua pengguna harus terhubung ke server melalui SSH dengan akun yang sama.
- Salah satu pengguna harus menjalankan tmux untuk membuat sesi tmux.
- Pengguna kedua menjalankan perintah tmux attach.
- Semuanya sudah siap!
Jika Anda perlu menyesuaikan sesi multi-pengguna, Anda harus menggunakan tmate . Ini adalah garpu tmux yang lebih baik.
Saran ahli
Kami memutuskan untuk melengkapi terjemahan dengan tip kami sendiri - kami berharap bisa bermanfaat juga. Maxim Klochkov , Konsultan Senior di Pusat Solusi Jaringan Jet Infosystems dan pengajar kursus Profesi Keamanan Siber di Skillbox, membagikan pengalamannya yang berguna .
Penerusan port TCP
Ssh memiliki dua opsi yang berguna: -L dan -R.
Parameter -L mengatur port TCP terbuka di komputer lokal kami, ketika mencoba membuat koneksi TCP yang mana koneksi ini diteruskan secara transparan ke terowongan ssh, dan kemudian koneksi dibuat dari komputer jarak jauh.
Parameter -L diikuti dengan argumen dalam bentuk berikut:
ssh -L XXX:server1:YYY login@server2
Di sini server2 adalah server jarak jauh yang kita akses melalui ssh, login adalah nama pengguna di mana kita masuk ke server jauh, XXX adalah nomor port yang perlu diatur di komputer lokal, server1 adalah host yang kita perlukan untuk meneruskan koneksi dari port ini , dan terakhir YYY adalah port tujuan penerusan sambungan ini.
Mari kita lihat dua contoh.
Contoh 1.
- Kami berada di server spb.company1.ru, dan kami ingin menguji aplikasi web yang mengakses database di central-db.company1.ru
- Database ini hanya tersedia dari server moscow.company1.ru, pada port 9999
- Kami akan mengatur penerusan port lokal 55555 ke database melalui terowongan ssh sebagai berikut: ssh -L 55555: central-db.company1.ru: 9999 login@moscow.company1.ru
- Setelah itu, kami menerapkan aplikasi web di server lokal kami, dan kami tidak menetapkan central-db.company1.ru:9999 sebagai basis, tetapi localhost: 55555 - koneksi ini akan diteruskan ke server moscow.company1.ru, dan server ini akan membuat koneksi dengan database pada host central-db.company1.ru, port 9999
Contoh 2.
- Kami berada di server spb.company1.ru, dan kami ingin menunjukkan situs pengujian kepada pelanggan di moscow.company1.ru, port 5000.
- Tidak ada akses ke situs ini dari Internet, hanya ada akses internal dari host yang sama yang digunakan, yaitu dari moscow.company1.ru
- Kami mengatur penerusan port lokal 80 melalui terowongan ssh sebagai berikut ssh -L 80: localhost: 5000 login@moscow.company1.ru
- Jika sekarang pengguna memasuki browser menggunakan tautan spb.company1.ru , maka koneksi akan diteruskan melalui terowongan ssh ke server moscow.company1.ru, dan server ini sudah akan membuat koneksi ke alamat localhost: 5000, yaitu ke web pengujian kami -situs.
Parameter -R mengatur port TCP terbuka di server jauh, ketika Anda mencoba membuat sambungan TCP, sambungan ini diteruskan secara transparan ke terowongan ssh, dan kemudian sambungan dibuat dari server lokal.
Parameter -R diikuti dengan argumen dalam bentuk berikut:
ssh -R XXX:server1:YYY login@server2
Di sini server2 adalah server jarak jauh tempat kita masuk melalui ssh, login adalah nama pengguna di mana kita masuk ke server jarak jauh, XXX adalah nomor port yang perlu diatur di server jarak jauh, server1 adalah host yang kita perlukan untuk meneruskan koneksi dari server jarak jauh , dan terakhir YYY adalah port tujuan penerusan sambungan ini.
Mari kita lihat dua contoh.
Contoh 1.
- Kami berada di server moscow.company1.ru, dan dari server ini database tersedia di server central-db.company1.ru, di port 9999.
- Kami sedang menerapkan aplikasi web di server spb.company1.ru, dan database tidak dapat diakses dari server ini.
- Kami mengatur port forwarding dari server spb.company1.ru ke database sebagai berikut: ssh -R 55555: central-db.company1.ru: 9999 login@spb.company1.ru
- Setelah itu, kami menerapkan aplikasi web kami di server spb.company1.ru, tetapi kami tidak menetapkan central-db.company1.ru:9999 sebagai basis, karena server ini tidak tersedia untuk kami, tetapi localhost: 55555 - koneksi ini akan diteruskan ke lokal kami mesin melalui terowongan ssh, dan kemudian mesin lokal akan membuat koneksi ke server central-db.company1.ru, port 9999.
Contoh 2.
- Kami berada di server moscow.company1.ru dan memiliki situs web uji yang dipasang di server kami, pada port 5000.
- Situs web pengujian ini hanya tersedia secara lokal, koneksi dari Internet tidak diperbolehkan, tetapi kami ingin menunjukkan situs web ini kepada pelanggan yang dapat menggunakan browser web untuk mengakses server spb.company1.ru
- Kami akan mengatur penerusan port dari server spb.company1.ru sebagai berikut: ssh -R 80: localhost: 5000 login@spb.company1.ru
- Jika sekarang pengguna memasuki browser menggunakan tautan spb.company1.ru , maka koneksi akan diteruskan melalui terowongan ssh ke server lokal kami moscow.company1.ru, dan koneksi akan dibuat darinya ke localhost: 5000 - yaitu, ke web pengujian kami situs.
Trik apa yang bisa Anda bagikan?
Pada topik ini:
- Artikel " Cara menggunakan Bash akan menjalankan tugas tersebut ";
- Kursus online praktis " Administrasi OS Linux ".