Mengelola Koneksi SSH

9

Pada server Linux, bagaimana saya menemukan daftar semua koneksi SSH saat ini, atau memutuskan koneksi SSH tertentu?

Cerin
sumber
Apakah Anda tertarik dengan koneksi SSH yang masuk atau keluar? atau keduanya?
Shawn Chin
2
Pertanyaan ini lebih relevan untuk pengguna super
Saya hanya tertarik dengan koneksi yang masuk.
Cerin

Jawaban:

13

Jika Anda berencana melakukan ini secara interaktif, yang paling sederhana adalah dengan memohon whodan melihat apakah ada pengguna dari host jarak jauh.

[you@host]$ who
user1      :0           Feb  8 09:45
user1      pts/1        Feb 14 17:56 (:0.0)
malcolm    pts/3        Feb 15 17:50 (cockpit.serenity.com)
reynold    pts/2        Feb 15 17:48 (host123.firefly.co.uk)

Ini tentu saja tidak mudah, tetapi sangat mudah untuk mengetik pada permintaan dan mudah diproses dengan mata manusia.

Seperti yang ditunjukkan @gravyface, jika Anda menyertakan -uopsi whojuga akan mencetak PID terkait yang dapat Anda lewati killuntuk mengakhiri koneksi.

Shawn Chin
sumber
1
-uakan memberi Anda PID.
gravyface
ini tidak menunjukkan IP jika ada beberapa koneksi pada satu pengguna
Seseorang
Untuk beberapa alasan, ini tidak berhasil. Dari mesin jarak jauh, saya masuk ke mesin saya menggunakan ssh, dan di mesin saya, saya mengeksekusi a who -u. Membunuh pid tidak menghentikan koneksi pada mesin remote saya. Namun, setelah saya melakukan yang lsof -i | grep ":ssh" disarankan dalam jawaban oleh @ kce, saya mendapat pid yang berbeda; membunuh proses yang memutuskan koneksi. Mungkin ada beberapa proses yang dimulai karena koneksi ssh dan membunuh yang ditampilkan oleh yang tidak memutuskan koneksi; itu penjelasan saya.
Neo M Hacker
8

Bagaimana kalau menggunakan lsof?

# lsof -i |grep ":ssh"

sshd    1943      root    3u  IPv6   5698       TCP *:ssh (LISTEN)
sshd    1943      root    4u  IPv4   5700       TCP *:ssh (LISTEN)
sshd    3217      root    3r  IPv4   9687       TCP www.example.com:ssh->192.168.61.11:7341 (ESTABLISHED)
sshd    3220      user1   3u  IPv4   9687       TCP www.example.com:ssh->192.168.61.11:7341 (ESTABLISHED)
sshd    3327      root    3r  IPv4  10595       TCP www.example.com:ssh->192.168.61.11:7385 (ESTABLISHED)
sshd    3330      user2   3u  IPv4  10595       TCP www.example.com:ssh->192.168.61.11:7385 (ESTABLISHED)

Anda kemudian harus dapat mematikan koneksi yang menyinggung (misalnya, untuk memutuskan pengguna2):

# kill -9 3330

sumber
3
Gunakan lsof -i tcp:22dan Anda tidak perlu grep.
Shawn Chin
Hanya jika Anda menjalankan sshdan tidak menentukan -popsi ..
Jindra Helcl
1

Untuk melihat koneksi ssh Anda dapat melakukan a netstat -atn | grep ':22'. Ini menunjukkan semua koneksi pada port 22.

Untuk menjatuhkan koneksi, Anda dapat mencoba menemukan PID dari sshd (SSH Daemon) dengan ps-ax.

Sunting: Saya pikir Anda dapat menemukan PID dari bashsesi mereka (atau shell yang setara). Membunuh itu seharusnya menjatuhkan mereka baik-baik saja.

Sumber lain: utas ini memiliki beberapa tip tentang subjek.

Harap perlakukan mod Anda dengan baik.
sumber
Saya tidak memiliki koneksi aktif pada mesin saya saat ini, tetapi netstat masih mencantumkan koneksi tcp dan tcp6. Apa yang akan saya lakukan dengan PID sshd? Apakah Anda menyiratkan bahwa saya harus membunuh seluruh server SSH hanya untuk menjatuhkan satu koneksi?
Cerin
@Cerin Kedua koneksi menunjukkan bahwa ia mendengarkan pada port tersebut (hanya)
Anda tidak menentukan, tapi saya harus memilikinya. Maaf: /
Harap perlakukan mod Anda dengan baik.
0

Coba ini:

$ ps aux | grep sshd

Untuk memutuskannya, Anda bisa kill PID(di mana PIDId proses di kolom kedua), jika Anda memiliki hak akses root, atau pengguna yang dimaksud.

ltn100
sumber
Ini hanya menunjukkan sshd berjalan dan pengguna terhubung dengan (bukan jumlah koneksi, dari IP apa)