Bagaimana menentukan port yang dialokasikan pada server untuk terowongan reverse openssh yang terikat secara dinamis?

16

Saat membuat terowongan terbalik pada versi terbaru OpenSSH, port jarak jauh 0 dapat diberikan untuk mengikat setiap port yang tersedia:

-R [bind_address:] port: host: hostport

...

Jika argumen port adalah `0 ', port Listen akan dialokasikan secara dinamis di server dan dilaporkan ke klien pada saat run time.

manshage klien openssh ssh

Pertanyaan saya adalah bagaimana saya dapat (dengan cara otomatis) menentukan alokasi port ini di server. Tampaknya agak tidak membantu bahwa hal itu dilaporkan ke host yang menjalankan klien ssh - tetapi tidak ke target, yang ingin membuat koneksi ke port ini untuk mengakses layanan pada klien.

Dua opsi serupa yang dapat saya pikirkan sedang berjalan

# netstat -ntlp

pada server dan mencari port yang dicurigai terikat pada 127.0.0.1 oleh sshd atau dengan melihat output dari

# lsof -p $PPID | grep TCP | grep LISTEN

Tapi tidak satu pun dari ini yang menyenangkan dari sudut pandang otomatisasi, dan tidak ada cara untuk mengikat port dinamis kembali ke port layanan asal jika lebih dari satu terowongan tersebut dibuat.

Apakah ada sesuatu yang saya lewatkan untuk secara efektif mendapatkan daftar terowongan aktif (baik nomor port lokal dan jarak jauh) di sisi server sshd, seperti yang setara dengan variabel lingkungan SSH_CONNECTION, tetapi untuk terowongan aktif?

Untuk beberapa konteks, saya mencoba membuat terowongan reverse simultan yang berpotensi sangat banyak ke host, tunneling kembali ke nomor port yang sama pada banyak host yang berbeda. Memiliki TCP stack secara otomatis mengelola pool port sepertinya merupakan cara paling efektif untuk melakukan ini.

struktur kode
sumber
Saat menggunakan sintaks "-R 0: xxxx: y", ssh akan menampilkan "Alokasi port 49488 untuk penerusan jarak jauh ke xxxx: y pada stderr.
BlakBat
Ya, masalahnya adalah bagaimana cara mendapatkan informasi itu ke sisi server - di mana akan jauh lebih membantu ...
codedstructure

Jawaban:

1

Jika Anda mengatur 'LogLevel' di file konfigurasi sshd_config ke DEBUG1 (atau level DEBUG lainnya), maka sshd akan mencatat nomor port di /var/log/auth.log.

Ingat, bahwa menggunakan LogLevel DEBUG atau lebih tinggi bisa menjadi risiko privasi, karena banyak yang dicatat.

(dari /var/log/auth.log, menghapus beberapa baris untuk menampilkan informasi yang relevan)

Jun 24 06:18:24 radon sshd[9334]: Connection from 192.168.13.10 port 39193
Jun 24 06:18:24 radon sshd[9334]: Accepted publickey for lornix from 192.168.13.10 port 39193 ssh2
Jun 24 06:18:24 radon sshd[9334]: pam_unix(sshd:session): session opened for user lornix by (uid=0)
Jun 24 06:18:24 radon sshd[9334]: User child is on pid 9339
Jun 24 06:18:24 radon sshd[9339]: debug1: Local forwarding listening on 0.0.0.0 port 0.
Jun 24 06:18:24 radon sshd[9339]: debug1: Allocated listen port 39813
Jun 24 06:18:24 radon sshd[9339]: debug1: channel 0: new [port listener]
Jun 24 06:18:24 radon sshd[9339]: debug1: Local forwarding listening on :: port 39813.
Jun 24 06:18:24 radon sshd[9339]: debug1: channel 1: new [port listener]
Jun 24 06:18:27 radon sshd[9339]: Received disconnect from 192.168.13.10: 11: disconnected by user

Jika Anda mengikutinya, Anda bisa melihat di mana Anda dapat mengurai informasi koneksi, dan kemudian port yang diteruskan (39813 dalam kasus ini)

Saya menggunakan baris perintah ini di antara dua mesin saya, saya memiliki pengaturan login ssh-key, jadi tidak ada kata sandi yang meminta atau menunda

-xenon- lornix:~> ssh -R "*:0:radon:22" -N -T radon
Allocated port 39813 for remote forward to radon:22

-N menentukan tidak ada perintah yang diberikan, dan -T menghentikan alokasi tty untuk koneksi ini.

Cara lain untuk menyebarkan informasi koneksi port adalah menguraikannya dari sisi klien dan mengirim email, obrolan, pesan teks, sinyal asap atau merpati untuk membawa port # ke siapa pun yang membutuhkannya.

lornix
sumber
0

Anda dapat mengirimkan stderr sshke program yang membuka koneksi ke server pada mesin target dan melaporkan nama mesin / alamat IP / nomor seri / apa pun bersama dengan nomor port. Jenis seperti ini:

% ssh -R "*:0:radon:22" -N -T radon 2>&1 | sed "s/^/`uname -n` /" | netcat radon 3743
Russell Nelson
sumber