Zmień domyślny katalog, kiedy I SSH do serwera

42

Zastanawiałem się, czy istnieje sposób na zmianę domyślnego katalogu, w którym się umieszczam po SSH na moim serwerze Ubuntu.

99% czasu, kiedy loguję się na mój serwer, chodzi o dostęp do plików w określonym katalogu:

/var/www/websites

Czy istnieje plik konfiguracyjny, który mogę edytować, aby upewnić się, że po zalogowaniu loguję się do tego katalogu?

Bob Flemming
źródło

Odpowiedzi:

62

Istnieją dwa sposoby na osiągnięcie tego:

  • Zmień katalog domowy na serwerze na / var / www / sites (to nie jest tak naprawdę dobry pomysł)
  • dodaj cd /var/www/websitesna końcu swojego .bashrc. Używam tego na naszych puppetmasterach, ponieważ zawsze chcę tam być / etc / puppet / environment / dkaarsemaker zamiast mojego homedir :-)
Dennis Kaarsemaker
źródło
Dzięki. Zredagowałem plik bash.bashrc, który znajdował się w katalogu / etc. Pracowałem przysmak :)
Bob Flemming
7
Ooh, nie zrobiłbym tego, ponieważ wpływa to na wszystkich użytkowników. Lepiej edytować /home/yourlogin/.bashrc
Dennis Kaarsemaker 16.04.2013
6
Możesz chcieć umieścić to w swoim .profilezamiast .bashrc, ale zależy to od twojego przypadku użycia. .profilejest wykonywany tylko dla loginów interaktywnych (np. powłoki), ale .bashrcjest również wykonywany dla loginów nieinteraktywnych (np. scp, rsync itp.). Ponadto .profile jest częściej wywoływany przez powłoki, które nie są bash (np. Zsh).
phord
Plik .bashrc jest wykonywany po wykonaniu polecenia „exec bash” w celu odświeżenia wersji bash. Zmiana bashrc na specjalny przypadek użycia (tutaj logowanie ssh) nie jest przydatna.
user3123159,
14

Jeśli używasz kluczy do logowania SSH, możesz zmienić ścieżkę, przygotowując command=do przed kluczem ~/.ssh/authorized_keysna zdalnym serwerze. Przykład:

command="cd /var/www/websites ; /bin/bash -l" ssh-rsa AAA.....rest of the key

Można generować i używać wielu kluczy dla tego samego użytkownika. Jeden klucz na serwerze może zawierać polecenie, a drugi może nie - w ten sposób wybierasz oczekiwane zachowanie podczas logowania. Możesz po prostu zakończyć to lokalnie ~/.ssh/config :

Host websites-my-host
    HostName <realhostname>
    IdentityFile ~/.ssh/<key1>  #on the server key with "command"
    User webmaster

Host my-host
    HostName <realhostname>
    IdentityFile ~/.ssh/<key2>  #on the server key without command
    User webmaster

Oto co się stanie:

local$ ssh websites-my-host
webmaster@realhostname:/var/www/websites$ _

lub:

local$ ssh my-host
webmaster@realhostname:~$ _
gertas
źródło
3
Wolę to pytanie od zaakceptowanego. Umożliwia wielu użytkownikom korzystanie z tego samego użytkownika na serwerze i nadal jest w stanie dostosować to, co dzieje się podczas osobistego logowania. Znacznie bardziej elastyczny i poprawny jak drugi.
testuser
1
Trzeba tu być bardzo ostrożnym, ponieważ dodawanie poleceń do ~ / .ssh / uprawnionych_ kluczy wpływa na inne narzędzia oparte na ssh, takie jak rsync, scp. Te polecenia po prostu się
zawieszą
1
Możesz użyć $SSH_ORIGINAL_COMMANDzamiast, /bin/bash -laby uruchomić narzędzia (w moim przypadku hg). Lub $SHELLjeśli nie chcesz hardcorowo zaśmiecać. Nie wiesz, jak sprawić, by narzędzia i loginy ludzkie działały jednocześnie.
mpen
Tylko słowo ostrzeżenia: jeśli wyłączyłeś uwierzytelnianie hasła (patrz askubuntu.com/questions/346857/... ) i przypadkowo wpisałeś ciąg poleceń, możesz zablokować się w systemie.
karan.dodia
6

Openssh sshd domyślnie akceptuje następujące zmienne środowiskowe od klienta:

AcceptEnv LANG LC_*

Możesz użyć tego, aby wysłać wartość ze środowiska lokalnego klienta na serwer w następujący sposób:

LC_CDPATH=/var/www/websites ssh -o SendEnv=LC_CDPATH user@server

Możesz umieścić dyrektywę SendEnv w ~ / .ssh / config, abyś nie musiał dołączać jej do wiersza poleceń.

Jeśli umieścisz następujące elementy w ~ / .profile (aby wpływać tylko na loginy interaktywne, użyj .profile, aby wpłynąć na wszystkie loginy, użyj .bashrc):

if [ "$LC_CDPATH" -a -d "$LC_CDPATH" ]; then
  cd "$LC_CDPATH";
fi

Następnie automatycznie zmieni katalog na katalog określony w zmiennej środowiskowej podczas logowania, jeśli jest określony i jeśli jest to katalog.

Victor Jerlin
źródło
1
+1 za LC_*lewę
Orient