Saya ingin mendeteksi dari skrip shell (lebih khusus. Zshrc) jika dikontrol melalui SSH. Saya mencoba variabel HOST tetapi selalu nama komputer yang menjalankan shell. Bisakah saya mengakses nama host tempat sesi SSH berasal? Membandingkan keduanya akan menyelesaikan masalah saya.
Setiap kali saya masuk ada pesan yang menyatakan waktu masuk dan host terakhir:
Last login: Fri Mar 18 23:07:28 CET 2011 from max on pts/1
Last login: Fri Mar 18 23:11:56 2011 from max
Ini berarti server memiliki informasi ini.
ssh
shell-script
zsh
stribika
sumber
sumber
.profile
. Dan apa hubungannya dengan penerusan agen?SSH_AUTH_SOCK
variabel. Tetapi mengapa Anda menjalankan agen SSH dalam kasus itu? Apakah maksud Anda memulai agen jika Anda masuk tanpa penerusan agen? Mengapa tidak memulai agen jika belum ada satu ([ -n "$SSH_AUTH_SOCK" ] || eval $(ssh-agent)
)?SSH_*
Variabel juga diatur dalam subproses dari shell yang ada di kepala sesi SSH, misalnya jika Anda memulai sesi layar melalui SSH (Anda harus menghapus variabel sebelum memulai sesi jika Anda peduli). Saya pikir alasan untuk menguji proses induk adalah bahwa saya mulai melakukan itu sebelum sshd mendefinisikan variabel lingkungan apa pun.Anda harus dapat memeriksa melalui
SSH_TTY
,SSH_CONNECTION
atauSSH_CLIENT
variabel.sumber
env_keep
dalamsudoers
untuk membuatnya bekerja melintasisu
perintah :)Saya baru saja mengalami masalah yang sama di Linux, menggunakan Bash. Saya pertama kali menggunakan variabel lingkungan SSH_CONNECTION, tetapi kemudian menyadari bahwa itu tidak disetel jika Anda
su -
.Solusi lastlog di atas tidak berfungsi baik setelah
su
atausu -
.Akhirnya, saya menggunakan
who am i
, yang menunjukkan IP jarak jauh (atau nama host) pada akhirnya jika itu koneksi SSH. Ini juga berfungsi setelah su.Menggunakan ekspresi reguler Bash, ini berfungsi:
Jika zsh tidak mendukung ekspresi reguler, hal yang sama dapat dicapai dengan berbagai cara dengan grep, cut, sed, atau apa pun.
Bagi yang penasaran, di bawah ini saya gunakan untuk apa, di root .bashrc:
Alternatif yang juga berfungsi
su
adalah mencari secara rekursifsshd
melalui proses induk:Jika fungsi ditambahkan ke .bashrc, ini dapat digunakan sebagai
if is_ssh; then ...
sumber
tmux
sesi jarak jauh dan juga memiliki masalah jika masuk melalui IPv6 dan tidak ada nama terbalik DNS.who am i
tidak menunjukkan alamat IPv6 Anda?who am i
tidak mengembalikan apa pun dalamtmux
sesi jarak jauh . 2) Alamat IPv6 mungkin berisi titik dua yang tidak diizinkan oleh regex Anda. Ini mungkin sulit karenawho am i
mengandung(:0.0)
sesi X untuk saya (xterm).screen
.Saya pikir jawaban Gilles dan Cakemox baik, tetapi hanya untuk kelengkapan ...
berasal dari
pam_lastlog
1 .Anda dapat mencetak
pam_lastlog
informasi menggunakan perintahlastlog
2 , misuntuk login lokal, dibandingkan dengan
untuk login SSH.
Di sistem saya, ini berfungsi untuk mengekstraknya
last
danw
bisa membantu juga, misalnya1 dokumentasi Linux / FreeBSD untuk
pam_lastlog
.2 halaman manual Linux / FreeBSD
lastlog(8)
.sumber
Mulailah dengan melihat lingkungan Anda dan menemukan opsi yang tepat
Anda bisa menghubungkan ke banyak variabel lingkungan ini untuk memicu tindakan spesifik berdasarkan keberadaannya.
sumber
Ini untuk memeriksa semua koneksi yang dibuat dari pengguna lain menggunakan SSH
sumber