Hari baik untuk semua!
Minggu depan kami meluncurkan
grup Administrator Linux berikutnya, sehubungan dengan itu kami mengadakan sejumlah acara. Salah satunya adalah pelajaran terbuka tentang topik "SSH / NC / Socat: tips & trik". Di atasnya kita ingat apa ssh, sejarah dan misinya. Kami memeriksa berbagai opsi untuk penggunaannya: remote, penerusan port lokal, salinan aman, proxy kaus kaki, proxy terbalik. Kami benar-benar mencoba utilitas nc dan socat di lab virtual.
Webinar ini dilakukan oleh administrator sistem berpengalaman
Vladimir Drozdetsky , pengembang infrastruktur di letundra.com, exposcan.ru, crispmessenger.com.
Kami memberi Anda uraian terperinci tentang peristiwa masa lalu.
Ingat Apa itu SSHSSH (Secure Shell) adalah "secure shell", protokol jaringan tingkat aplikasi. Ini memungkinkan Anda untuk mengontrol sistem operasi dan koneksi TCP dari jarak jauh (misalnya, untuk mentransfer file). Dalam fungsinya, SSH mirip dengan protokol Telnet dan rlogin, namun berbeda dari protokol karena mengenkripsi semua lalu lintas, termasuk kata sandi yang dikirimkan. Spesifikasi protokol SSH-2 terkandung dalam RFC 4251.
Mari kita lihat berbagai kegunaan SSH, baik standar maupun non-standar. Stand berikut akan membantu kami dalam hal ini:

Stand menghadirkan empat mesin virtual yang ada di belakang firewall. Kami akan melakukan semua tindakan dari mesin Node-1.
Membuat Kunci SSH
Untuk menggunakan kunci SSH, Anda harus membuatnya terlebih dahulu. Untuk ini, utilitas khusus cocok, yang mutlak dalam distribusi Linux:
ssh-keygen -t RSA -N otuslinux -f ~/.ssh/otus
- -t - algoritma enkripsi mana yang digunakan;
- -N - kunci enkripsi (argumen yang nyaman jika Anda perlu membuat kunci tanpa enkripsi dan respons terhadap berbagai permintaan ssh-keygen);
- -f - di mana file untuk menyimpan kunci.
Pengaturan SSH ssh-serverUntuk pekerjaan lebih lanjut, Anda perlu mengedit file / etc / ssh / sshd_config dan restart server ssh. Di sini Anda harus memperhatikan opsi-opsi berikut:
RSAAuthentication yes
(apakah otentikasi RSA diizinkan);
PubkeyAuthentication yes
(apakah otentikasi dengan kunci diizinkan);
AuthorizedKeysFile %h/.ssh/authorized_keys
(path ke bagian publik dari kunci);
PasswordAuthentication yes
(apakah otentikasi diizinkan).
Untuk menyalin kunci ke server, lanjutkan sebagai berikut:
ssh-copy-id -i /path/to/pub/key user@server
(salin bagian publik dari kunci ke server jarak jauh, kunci publik akan disalin di sepanjang jalan ke file% h / .ssh / official_keys)
Agar tidak memasukkan kunci enkripsi lagi setiap kali saat menghubungkan ke server jarak jauh, kita dapat menggunakan ssh-agent. Untuk melakukan ini:
eval $(ssh-agent -s)
(eval adalah bagian dari POSIX. Antarmukanya juga bisa berupa shell. Kunci dalam agen akan disimpan dalam bentuk yang didekripsi).
ssh-add ~/.ssh/our_private_key
(Tambahkan kunci pribadi).
Dalam hal ini:
- -i - menunjukkan lokasi kunci publik;
- pengguna - nama pengguna pada server jarak jauh;
- server - ip atau dns dari server target.
Untuk kemudahan menghubungkan ke server jauh, kita dapat menggambarkan parameter koneksi dalam file konfigurasi ssh, yang terletak di path ~ / .ssh / config
Dengan demikian, kita mendapatkan file konfigurasi SSH berikut:
Host myserver HostName ip/hostname Port 22/??? User username IdentityFile ~/.ssh/id_rsa
Semuanya sederhana di sini:
- Tuan rumah - nama koneksi kami;
- HostName - nama server;
- Port - ssh port
- Pengguna - nama pengguna;
- IdentityFile - kunci ssh.
SSH SCPMari kita lanjutkan. Cara termudah untuk menggunakan SSH adalah menyalin file dari satu mesin ke remote. Untuk melakukan ini, gunakan utilitas SCP (Secure Copy Protocol). Dengan menggunakannya, Anda dapat menyalin direktori atau file dari server lokal ke server jarak jauh, atau sebaliknya:
scp test.txt username@server:/some/directory
(Menyalin file dari server lokal ke server jarak jauh).
scp username@server:test.txt /some/directory
(Menyalin file dari server jauh ke yang lokal).
scp -r dir_name username@server:/some/directory
(Menyalin folder dari server lokal ke remote).
Di sini:
- nama pengguna - nama pengguna;
- server - alamat server;
- / some / server - direktori tempat kita menyalin;
- dir_name - nama folder;
- -r - gunakan secara rekursif.
Terowongan SSH, proksiSekarang mari kita lihat opsi penerusan port dengan remote ke mesin lokal. Ambil contoh klasik sebagai contoh, yaitu banyak ketika kita memiliki "penjaga keamanan jahat" dan satu server dengan aplikasi web, port ssh dan https mencari ke dunia, dan kami benar-benar ingin terhubung ke server MySQL.
Jadi:
ssh -f -N -L 9906:127.0.0.1:3306 user@server
(Hanya kasus kami dengan MySQL)
Akibatnya, kita dapat terhubung ke port lokal 9906 dengan klien mysql dan sampai ke server "keamanan" kami.
ssh -D 8080 -q -C -N -f servername
(Proxying traffic melalui SOCKS melalui port 8080)
Dengan perintah ini, kami membuat server proxy socks5 menggunakan ssh. Untuk memeriksa kinerjanya, kita dapat menggunakan perintah berikut:
curl -x socks5h://server-with-proxy:8080 https://test.domain
Contoh klasik dari penerusan port menggunakan ssh adalah ketika server yang ingin Anda sambungkan berada di belakang nat. Perintah berikut akan membantu kami terhubung ke server seperti itu:
ssh -f -N -R 2255:localhost:22 username@servername
(meneruskan dari server jauh ke server lokal).
Pada server jarak jauh, port 2255 akan terbuka, yang akan dialihkan ke port 22 dari server kami untuk nat. Untuk terhubung ke server seperti itu, kita dapat menggunakan perintah:
ssh -p 2255 username@localhost
Harap dicatat bahwa:
- -f - kirim ssh ke latar belakang;
- -N - jangan menjalankan perintah pada remote host;
- -L - meneruskan port lokal (port lokal: mesin lokal: port jarak jauh);
- -R - port pada mesin jarak jauh;
- -q - mode diam;
- -D - mendefinisikan perutean dinamis lokal port level aplikasi;
- -C - permintaan untuk kompresi data.
Netcat (nc)Perhentian kami berikutnya adalah Netcat, utilitas Unix yang memungkinkan Anda membuat koneksi TCP dan UDP, menerima data dari sana, dan mentransfernya. Terlepas dari kegunaan dan kesederhanaannya, utilitas ini tidak termasuk dalam standar apa pun dan tidak disertakan dengan kit distribusi apa pun. Oleh karena itu, harus dipasang dengan tangan.
Salah satu fitur menarik dari Netcat (nc) adalah kemampuan untuk memindai port:
nc -vn ipaddress 22
(pemindaian port tunggal);
nc -v ipaddress 10-55
(pemindaian jangkauan port);
nc -l 4444
(buka dan dengarkan port 4444);
nc servername 4444
(kami terhubung ke server pada port yang diinginkan).
Setelah membuka port dan menghubungkannya, kami mendapatkan ruang obrolan jaringan kecil =).
Selanjutnya, kami mempertimbangkan kemungkinan mentransfer file menggunakan utilitas nc. Untuk melakukan ini, perintah berikut akan membantu kami:
cat test_file | pv -b | nc -l 4444
cat test_file | pv -b | nc -l 4444
(buka port dan transfer file ke dalamnya melalui pipa, utilitas pv dengan switch -b digunakan untuk menampilkan progres transfer file dalam byte).
nc servername 4444 | pv -b > filename
nc servername 4444 | pv -b > filename
(kami terhubung ke server untuk menerima file, pv -b digunakan dengan cara yang sama).
Kami dapat menyulitkan pipa kami dengan menambahkan pengarsipan file dengan cepat:
tar -czf - /path/to/ | pv -b | nc -l 4444
tar -czf - /path/to/ | pv -b | nc -l 4444
(folder pengarsipan dengan cepat dan mengirim);
n
c servername 4444 | pv -b > file.tar.gz
c servername 4444 | pv -b > file.tar.gz
(dapatkan arsip terkirim).
Fitur yang tidak terlalu jelas dari nc adalah membuat server http saja.
while true; do nc -lp 80 < index.html; done
Harap dicatat bahwa untuk menggunakan port 80, Anda harus memiliki hak akses root.
Perhatikan juga bahwa:
- -l - menunjukkan mode operasi mendengarkan;
- -n - jangan gunakan permintaan DNS;
- -v - keluaran verbose.
SocatIni juga merupakan utilitas yang berguna yang memungkinkan Anda untuk membuat koneksi TCP antara mesin, port forward, dll. Ia bekerja berdasarkan prinsip Netcat: ia membuka dua koneksi dua arah, dapat mentransfer data, stream, dll. Namun, ia memiliki satu fitur menarik. Misalnya, menggunakan Socat, kita dapat memetakan port COM ke port TCP, dll.
Contoh pekerjaan sosial:
socat -u FILE:file_name TCP-LISTEN:5778,reuseaddr
# send file;
socat -u TCP:192.168.1.48:5778 STDOUT | pv -r > file_name
socat -u TCP:192.168.1.48:5778 STDOUT | pv -r > file_name
# get file;
socat TCP-LISTEN:80,fork TCP:ubuntunode-4:80
# mengalihkan port server jarak jauh ke port lokal;
socat TCP-LISTEN:1234,reuseaddr EXEC:/bin/bash
# Buka remote shell =);
socat - TCP:server_with_remote_shell:1234
# Sambungkan ke shell remote dari server jauh.
Dekripsi kecil:
- -u - penggunaan mode searah;
- FILE - menunjukkan bahwa kami menggunakan file;
- TCP-LISTEN - dengarkan port tcp;
- reuseaddr - memungkinkan soket lain untuk berkomunikasi dengan alamat yang sama, bahkan jika digunakan;
- garpu - setelah koneksi dibuat, saluran diproses dalam proses anak;
- TCP adalah jenis koneksi.
Haruskah saya menonton versi video sekarang?Tentu saja ya, karena dalam uraian semuanya disajikan secara abstrak. Selain itu, topik dalam webinar dijelaskan secara lebih rinci, ditambah beberapa di antaranya memberikan contoh tambahan dan opsi implementasi. Jadi, jika Anda tertarik dengan topik ini, lihat pelajaran terbuka secara penuh dan ulangi semua langkah untuk
Vladimir Drozdetsky untuk asimilasi maksimum materi. Dan jangan lupa untuk meninggalkan komentar Anda.
Kami, pada gilirannya, tidak mengucapkan selamat tinggal dan mengundang Anda ke kursus
Administrator Linux !