Chcę wykryć ze skryptu powłoki (dokładniej .zshrc), czy jest on kontrolowany przez SSH. Próbowałem zmiennej HOST, ale zawsze jest to nazwa komputera, na którym działa powłoka. Czy mogę uzyskać dostęp do nazwy hosta, z której pochodzi sesja SSH? Porównanie tych dwóch rozwiązałoby mój problem.
Przy każdym logowaniu pojawia się komunikat informujący o czasie ostatniego logowania i hoście:
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
Oznacza to, że serwer ma te informacje.
ssh
shell-script
zsh
stribika
źródło
źródło
.profile
. A co to ma wspólnego z przekazywaniem agentów?SSH_AUTH_SOCK
zmienną. Ale dlaczego miałbyś w takim przypadku uruchomić agenta SSH? Czy miałeś na myśli uruchomienie agenta, jeśli jesteś zalogowany bez przekazywania agenta? Dlaczego nie uruchomić agenta, jeśli jeszcze go nie ma ([ -n "$SSH_AUTH_SOCK" ] || eval $(ssh-agent)
)?SSH_*
Zmienne są również ustawiane w podprocesach powłoki znajdującej się na czele sesji SSH, na przykład, jeśli rozpoczynasz sesję screen over SSH (jeśli to ważne, należy rozbroić zmienne przed rozpoczęciem sesji). Myślę, że powodem przetestowania procesu nadrzędnego jest to, że zacząłem to robić, zanim sshd zdefiniował jakiekolwiek zmienne środowiskowe.Powinieneś być w stanie sprawdzić za pośrednictwem
SSH_TTY
,SSH_CONNECTION
lubSSH_CLIENT
zmiennych.źródło
env_keep
wsudoers
, aby pracować w poprzeksu
polecenia :)Właśnie miałem ten sam problem w Linuksie, używając Bash. Najpierw użyłem zmiennej środowiskowej SSH_CONNECTION, ale potem zdałem sobie sprawę, że nie jest ustawiona, jeśli ty
su -
.Powyższe rozwiązanie ostatniego logowania nie działało ani po,
su
anisu -
.Wreszcie używam
who am i
, który pokazuje zdalny adres IP (lub nazwę hosta) na końcu, jeśli jest to połączenie SSH. Działa również po su.Używając wyrażeń regularnych Bash, działa to:
Jeśli zsh nie obsługuje wyrażeń regularnych, to samo można osiągnąć na wiele różnych sposobów za pomocą grep, cut, sed lub cokolwiek innego.
Dla ciekawskich, poniżej jest to, do czego używam, w katalogu root .bashrc:
Alternatywą, która również działa,
su
byłoby rekurencyjne wyszukiwanie zasshd
pośrednictwem procesów nadrzędnych:Jeśli funkcja zostanie dodana do .bashrc, może być używana jako
if is_ssh; then ...
źródło
tmux
sesjach zdalnych i ma również problemy, jeśli jest zalogowany przez IPv6 i nie istnieje odwrotna nazwa DNS.who am i
nie pokazuje twojego adresu IPv6?who am i
nie zwraca niczego wtmux
sesji zdalnej . 2) Adres IPv6 może zawierać dwukropki, na które nie pozwala wyrażenie regularne. Może to być trudne, ponieważwho am i
zawiera(:0.0)
dla mnie sesje X (xterm).screen
.Myślę, że odpowiedzi Gillesa i Cakemoxa są dobre, ale tylko dla kompletności ...
pochodzi z
pam_lastlog
1 .Możesz wydrukować
pam_lastlog
informacje za pomocą polecenialastlog
2 , npdla lokalnego logowania, w porównaniu do
do logowania SSH.
W moim systemie działa to w celu wyodrębnienia go
last
iw
może być na przykład pomocny1 dokumentacja Linux / FreeBSD dla
pam_lastlog
.2 strony podręcznika Linux / FreeBSD
lastlog(8)
.źródło
Zacznij od spojrzenia na swoje środowisko i znalezienia właściwej opcji
Możesz podłączyć wiele z tych zmiennych środowiskowych, aby wywoływać określone działania na podstawie ich obecności.
źródło
Ma to na celu sprawdzenie wszystkich ustanowionych połączeń od innych użytkowników korzystających z SSH
źródło