Saya memiliki skrip yang harus dijalankan oleh orang yang masuk ke server dengan SSH .
Apakah ada cara untuk mencari tahu secara otomatis alamat IP mana yang disambungkan pengguna?
Tentu saja, saya bisa bertanya kepada pengguna (ini adalah alat untuk programmer, jadi tidak ada masalah dengan itu), tetapi akan lebih keren jika saya baru tahu.
linux
networking
ssh
ip-address
flybywire
sumber
sumber
Jawaban:
Periksa apakah ada variabel lingkungan bernama:
ATAU
(atau variabel lingkungan lainnya) yang akan disetel saat pengguna masuk. Lalu memprosesnya menggunakan skrip login pengguna.
Ekstrak IP:
sumber
${SSH_CLIENT%% *}
sudo -E
Anda bisa menggunakan perintah:
yang akan memberi Anda beberapa hal seperti ini:
sumber
pinky --help
:A lightweight 'finger' program; print user information. The utmp file will be /var/run/utmp.
Coba yang berikut ini untuk mendapatkan alamat IP:
sumber
who am i
! =whoami
di Linux saya setidaknya. Ada hal kelima, dan itu adalah nama host klien.who am i
: manualnya The untukwho
mengatakan:If ARG1 ARG2 given, -m presumed: 'am i' or 'mom likes' are usual.
. Jadi benar-benar apa pun dengan dua kata berfungsi, juga hal-hal sepertiwho likes icecream
.who -m --ips|awk '{print $5}'
sehingga saya hanya memiliki IP dan tidak ada jawaban reverse-dns. Terima kasih atas bantuannyawho am i
!who am i|awk '{ print $5}'
(tmux(2445).%3)
Cukup ketik perintah berikut di mesin Linux Anda:
sumber
sumber
Saya menggunakan ini untuk menentukan variabel DISPLAY saya untuk sesi ketika masuk melalui ssh dan perlu menampilkan X jauh.
sumber
who am i | awk '{print $6}' | sed 's/[()]//g' | sed 's/\./\\./g'
Bagian terakhir lolos dari titik-titik.Memperbaiki jawaban sebelumnya. Memberikan alamat ip alih-alih nama host. --ips tidak tersedia di OS X.
lebih universal, ubah $ 5 menjadi $ 6 untuk OS X 10.11:
sumber
sumber
(No info could be read for "-p": geteuid()=507 but you should be root.)
sudo ss -tapen | grep ssh | awk '{ print $4}'|grep -v ':22$'
bekerja?Anda bisa mendapatkannya secara terprogram melalui pustaka SSH ( https://code.google.com/p/sshxcute )
sumber
netstat akan bekerja (di bagian atas seperti ini) tcp 0 0 10.x.xx.xx: ssh someipaddress.or.domainame: 9379 ESTABLISHED
sumber
Keluaran:
dua # dalam percobaan saya
memberikan alamat IP.
Keluaran:
Tetapi hasilnya dicampur dengan pengguna dan barang lainnya. Perlu lebih banyak pekerjaan.
sumber
utas yang lebih tua dengan banyak jawaban, tetapi tidak ada yang saya cari, jadi saya berkontribusi untuk saya:
metode ini kompatibel dengan ssh langsung, pengguna sudoed, dan sesi layar. ia akan menelusuri melalui pohon proses hingga menemukan pid dengan variabel SSH_CLIENT, lalu merekam IP-nya sebagai $ sshClientIP. jika terlalu jauh ke atas pohon, ia akan merekam IP sebagai 'localhost' dan meninggalkan loop.
sumber
Biasanya ada entri log di / var / log / messages (atau serupa, tergantung pada OS Anda) yang dapat Anda coba gunakan dengan nama pengguna.
sumber
Linux: siapa aku | awk '{print $ 5}' | sed 's / [()] // g'
AIX: siapa aku | awk '{print $ 6}' | sed 's / [()] // g'
sumber
Cari koneksi SSH untuk akun "myusername";
Ambil string hasil pertama;
Ambil kolom ke-5;
Dibagi dengan ":" dan mengembalikan bagian 1 (nomor port tidak diperlukan, kami hanya menginginkan IP):
netstat -tapen | grep "sshd: myusername" | kepala -n1 | awk '{split ($ 5, a, ":"); cetak a [1]} '
Cara lain:
siapa aku | awk '{l = length ($ 5) - 2; print substr ($ 5, 2, l)} '
sumber
sudo ss -tapen | grep "sshd: $(whoami)"|head -n1|awk '{split($5, a, ":"); print a[1]}'
kata klien ssh saya berasal dari2a02
dan "Cara lain:" kata Andatmux(2445).%3
Dengan asumsi dia membuka sesi interaktif (yaitu, mengalokasikan terminal semu ) dan Anda memiliki akses ke stdin, Anda dapat memanggil ioctl pada perangkat itu untuk mendapatkan nomor perangkat (/ dev / pts / 4711) dan mencoba untuk menemukannya di / var / run / utmp (di mana juga akan ada nama pengguna dan alamat IP asal koneksi).
sumber
Satu jempol untuk jawaban @Nikhil Katre:
Yang menggunakan
who
ataupinky
melakukan apa yang pada dasarnya diminta. Tapi Tapi Tapi mereka tidak memberikan info sesi sejarah.Yang mungkin juga menarik jika Anda ingin mengenal seseorang yang baru saja masuk dan keluar saat Anda memulai pemeriksaan ini.
jika itu adalah sistem multiuser. Saya merekomendasikan menambahkan akun pengguna yang Anda cari:
EDIT:
Dalam kasus saya, $ SSH_CLIENT dan $ SSH_CONNECTION tidak ada.
sumber
Perintah paling sederhana untuk mendapatkan 10 pengguna terakhir yang masuk ke mesin adalah
last|head
. Untuk mendapatkan semua pengguna, cukup gunakanlast
perintahsumber
Saya mendapatkan output berikut dari
who -m --ips
pada Debian 10:Sepertinya kolom baru ditambahkan, jadi
{print $5}
atau " ambil kolom ke-5 " upaya tidak berfungsi lagi.Coba ini:
Sumber:
sumber