SSH girişinde ve / veya çıkışında komut dosyası çalıştır (sistem)


12

OpenSSH sunucumun, bir kullanıcı SSH kullanarak oturum açtığında, ideal olarak ana bilgisayar adını veya IP'yi ve kullanıcı adını geçirdiğinde bir komut dosyası başlatmasını istiyorum. Buna ek olarak, bir oturum sonlandırıldığında (kullanıcı adını geçirerek) bir komut dosyası çalıştırmak istiyorum. Bu komut dosyaları kullanıcının oturumunda değil, sistem genelinde çalıştırılmalıdır.

Buradaki fikir, oturum açma ve oturumu kapatma gibi sesli bir uyarı vermek, örneğin kullanmak espeakve bilgileri harici bir ekranda görüntülemek.

Bir pam-scriptspaket olduğunu gördüm ama bunun istediğimi yapıp yapmadığını ya da nasıl kullanacağını bilmiyorum.

Yanıtlar:


10

SSH kullanıcılarınıza istedikleri (veya belirli bir komut vermedikleri takdirde kabukları) yerine bir komut zorlayabilirsiniz. Bu gibi bir şey ile komut belirterek yapılabilir ForceCommand /root/ssh-wrapperiçinde /etc/ssh/sshd_config(o madde komut bulunduğu vermez nerede veya adlandırılmış nasıl, sadece emin tüm kullanıcılara ve buna sshd yapılandırma dosyası puan çalıştırılabilir olduğunu olun). Ayrıca yeniden başlatmanız / yeniden yüklemeniz gerekir sshd. Orijinal komut erişebileceği zorla komutu olarak $SSH_ORIGINAL_COMMAND.

Bu senaryoyu birlikte hackledim:

#! /bin/sh

# add logger options when needed
log="logger -t ssh-wrapper"

# find IP address
ip=`echo $SSH_CONNECTION | cut -d " " -f 1`

$log $USER login from $ip
espeak "$USER just logged in from $ip" > /dev/null 2>&1

$log command: ${SSH_ORIGINAL_COMMAND:-shell}
${SSH_ORIGINAL_COMMAND:-shell}

$log $USER logout
espeak "$USER just logged out" > /dev/null 2>&1

Şimdi her giriş yaptığımda veya oturumu kapattığımda bir ses bana anlatıyor ve syslog'a bir günlük girişi yazılıyor. Ayrıca komutu günlüğe kaydeder. Sshd kullanımınızı "takip etmek" için aşağıdakine benzer bir şey kullanabilirsiniz:

tailf /var/log/syslog | grep ssh-wrapper

Bu komut dosyasının çoğunlukla test edilmediğini lütfen unutmayın, bu nedenle kendi sorumluluğunuzdadır kullanın! ;-)

Not: Bu komut dosyasının giriş yapan kullanıcı olarak çalıştırıldığını unutmayın, bu nedenle daha fazla özellik eklemek için değiştirirseniz istediğiniz her şeyi yapamazsınız ...


Merhaba, Kullanıcı ssh istemcisi ile pencereyi kapattığında durumu tespit etmek için herhangi bir yolu var mı. Senaryonuz bu durumu kancalamıyor .. Teşekkürler.
Dmitry Eskin

Should shell$ {SSH_ORIGINAL_COMMENT: -shell} örn kabuğuna gerçek yolu ile değiştirilir. / bin / bash? Bunu çalıştırmayı denediğimde, kabuk gibi bir komutun olmadığından şikayet ediyor. Aslında, sanırım ne demek istediğin $ SHELL? Kullanıcının belirttiği kabuk çalıştırılmalıdır.
İbrahim


0

(Yanıt aynı sorudan ServerFault'ta gönderildi )

İstediğinizi yapmak için bir komut dosyası yazmanız ve ardından ihtiyaçlarınıza bağlı olarak /etc/profileveya muhtemelen /etc/bash.bashrcihtiyaçlarınıza bağlı olarak yapıştırmanız yeterlidir. Bu dosyalarda yapılan değişiklikler tüm kullanıcılar için geçerli olacaktır. Yine de, bu yaklaşımla oturumu kapatmayı nasıl bildireceğinizden emin değilim.

Alternatif olarak, bunu yapmanın başka bir yolu da /var/log/authyeni (ve kapanış) ssh oturumları için basit bir arka plan programı izlemektir . Bu şekilde hem giriş hem de çıkışta bildirim gönderebilir.


0

Sshrc'yi kullanabilirsiniz (man sshd, sshrc için arama yapın)

ssh, varsa / etc / ssh / sshrc dosyasını çalıştırır ve oradan bir komut dosyası çalıştırabilir (veya birden çok komut dosyasını çağırabilirsiniz)

$USERIP gibi herhangi bir bash değişkenini arayabilir veya alabilirsiniz

read -d " " ip <<< $SSH_CONNECTION

istediğinizi test etmek veya günlüğe kaydetmek için bir komut dosyası yazabilirsiniz.

Çıkış betiği ... iyi, ben de bunu arıyorum! : D


0

Bence PAM en iyi seçenek. Sistem çapındadır ve kullanıcının yapılandırma dosyaları tarafından geçersiz kılınamaz.

Bu adımları takip edebilirsiniz. Benim için Ubuntu 14.04.4 LTS'de çalıştılar.

Çalıştırmak:

$ sudo pico /opt/custom/bin/info-session.sh

Bu boş dosyayı düzenleyin ve şu satırları ekleyin:

#!/bin/sh

[ "$PAM_TYPE" = "open_session" ] || exit 0

INFO=$(date +"%Y/%m/%d %T $PAM_USER ($PAM_RHOST) $PAM_SERVICE $PAM_TTY") # You can customize message.

echo "PAM access: $INFO" | write user > /dev/null 2>&1 # See Note 1.

exit 0

Bundan sonra, komut dosyasına yürütme izni verin:

$ sudo chmod ugo+x /opt/custom/bin/info-session.sh

Şimdi çalıştırın:

$ sudo pico /etc/pam.d/common-session

Dosyanın sonuna şu satırları ekleyin:

# Modified by user:
session optional pam_exec.so /opt/custom/bin/info-session.sh

Herhangi bir hizmeti yeniden başlatmanıza gerek yoktur. Bu komut dosyasının, kullanıcı SSH yerine terminalden oturum açtığında da çalıştırılacağını unutmayın.

Not 1: Şunları yapabilirsiniz için boru espeakveya ihtiyaçlarınıza uyan herhangi bir başka işlem (böylece e-posta, push bildirimi ve ...). Kullanırsanız writeve kullanıcı oturum açarsa , çıkış iletilerini doğrudan terminallerinde görür.

Referanslar:
https://blog.stalkr.net/2010/11/login-notifications-pamexec-scripting.html
https://blog.redbranch.net/2014/06/04/pam_exec-so-execute-commands-on -Kullanıcı Girişi/

İlgili:
ssh girişi başarılı olduğunda e-posta uyarısını nasıl ayarlarım?
/server/400613/how-can-i-configure-my-server-to-notify-me-whenever-it-is-remotely-accessed-via
/server//questions / 395393 / e-posta bildirimi-yaklaşık-her-ssh-bağlantı-to-linux sunucuya

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.