Używam Bash zarówno na kliencie, jak i serwerze. Podczas uruchamiania polecenia przez SSH:
ssh <host> 'declare'
daje listę zmiennych powłoki.ssh <host> 'mount'
daje listę punktów montowania.
Jednak declare
jest wbudowany w Bash, natomiast mount
jest poleceniem zewnętrznym. Skąd SSH wie, które uruchomić, jeśli na serwerze jest wbudowana powłoka i zewnętrzne polecenie o tej samej nazwie?
/etc/passwd
. Jeśli nie/usr/sbin/nologin
możesz się zalogować.Odpowiedzi:
ssh
Uruchamia komendy podasz w skorupkach zdalnego użytkownika (otrzymany z/etc/passwd
), a widoczne z kodem źródłowym :Dlatego odpowiednie polecenia, które są wykonywane w twoim przykładzie na zdalnym serwerze to:
bash -c declare
bash -c mount
Oba są przekazywane
bash
i oceniane. Wbudowane są analizowane wewnątrz, a zewnętrzne polecenia są wywoływane tak, jakbyś zrobił to z lokalnego wiersza poleceń.źródło
-t
przełącznika, ale nadal nie ładuje on plików rc.sshd
robi to (serwer), a niessh
(klient).