Usiłuję uzyskać ssh
automatyczną zmianę do określonego katalogu po zalogowaniu. Próbowałem uruchomić to zachowanie, korzystając z następujących dyrektyw w ~/.ssh/config
:
Host example.net
LocalCommand "cd web"
ale przy każdym logowaniu widzę:
/bin/bash: cd web: No such file or directory
chociaż zdecydowanie jest web
folder w moim katalogu domowym. Nawet użycie bezwzględnej ścieżki daje ten sam komunikat. Żeby było jasne, jeśli piszę cd web
po zalogowaniu, przechodzę do odpowiedniego folderu.
Czego tu brakuje?
EDYTOWAĆ:
Różne kombinacje cytatów / ścieżek bezwzględnych dają różne komunikaty o błędach:
LocalCommand "cd web"
/bin/bash: cd web: No such file or directory
LocalCommand cd web
/bin/bash: line 0: cd: web: No such file or directory
LocalCommand cd /home/gareth/web
/bin/bash: line 0: cd: /home/gareth/web: Input/output error
To sprawia, że myślę, że cytatów nie powinno tam być i że pojawia się kolejny błąd.
Odpowiedzi:
cd jest wbudowaną powłoką. LocalCommand jest wykonywany jako:Tego, czego szukasz, nie można tak naprawdę osiągnąć poprzez SSH; musisz w jakiś sposób zmodyfikować powłokę, np. przez bashrc / bash_profile.<Edycja prawie dekadę później ...>
LocalCommand
w każdym razie nie jest tym, czego chcesz. To działa na twoim komputerze. ChceszRemoteCommand
. Coś takiego działało dla mnie:źródło
cd
polecenie~/.bashrc
na zdalnym serwerze.To działa:
Aby utworzyć katalog, jeśli nie istnieje:
Jeśli nie dodasz
bash
do końca ścieżki, wyjdziesz po uruchomieniucd
komendy. A jeśli nie dodasz,--login
to twoje~/.profile
źródło nie będzie.źródło
~/.bash_profile
cd /path/to/your/destination
/path/to/your/destination
źródło
cd /path/to/your/destination
do~/.bashrc
zamiast~/.bash_profile
. Wynik powinien być taki sam.~/.bash_profile
lub~/.bashrc
wpłynie to tylko na bieżącego użytkownika.Bardziej niezawodne rozwiązanie w przypadku, gdy trzeba ssh i przesłonić domyślny plik .bashrc. Jest to przydatne w przypadkach, gdy zdalne środowisko serwerowe ma wiele dokumentów i używane przez wielu użytkowników.
Bardziej szczegółowe:
.bashrc_tmp
plik w/tmp
katalogu na zdalnym serwerze z zawartościącd /path/to/dir
bash
z plikiem konfiguracyjnym określonym w kroku 1. Pozwala to na przejście do pożądanego katalogu i pominięcie domyślnego.bashrc
.alias
, więc w wierszu polecenia klienta ssh można go wywołać jakossh_myserver
źródło
Czy włączyłeś tę dyrektywę w swojej konfiguracji ssh?
Domyślnie jest to
no
, w którym przypadku twojaLocalCommand
dyrektywa zostanie zignorowana.Alternatywnie, czy próbowałeś dodać polecenie do swojego
.bashrc
pliku?źródło
Przeszukałem wiele stron internetowych (stackoverflow, ten), ale nie znalazłem tego, czego chciałem. W końcu stworzyłem własny skrypt powłoki. Wklejam to tutaj. Możesz także skopiować go do katalogu w katalogu PATH.
Więc po tym. Ja robię:
Uwaga: Może być konieczne wylogowanie i ponowne zalogowanie po zmianie zmiennej ścieżki
źródło
W twoim
~/.ssh/config
:Na koniec
~/.bashrc
:Próbowałem to zrobić za pomocą przekazywania zmiennych, w tym z eksportowaną zmienną, ale te polecenia są uruchamiane w różnych powłokach.
Nawiasem mówiąc, podczas testowania tego, co próbujesz zrobić, nie wystąpił błąd, gdy użyłem nie cytowanej ścieżki bezwzględnej. Dodałem
; pwd
na końcu polecenia i wyświetlany jest poprawny katalog, jednak katalog, w którym skończę, to~
. Wcd
moich plikach startowych powłoki nie ma poleceń. Próbowałem oddanie innacd somedir; pwd
w~/.ssh/rc
(z drugiej strony nadal na swoim miejscu).config
Polecenie jest wykonywane przed motd jest wydawana irc
polecenia wydawane później, ale przed skorupy pliki startowe są pozyskiwane. Więc znowu dzieje się to w innej powłoce.Wypróbuj technikę przekazywania plików i daj mi znać, czy to działa.
źródło
Czy próbowałeś tego bez cytatów? Jedyne przykłady, które widziałem, nie mają ich, więc przy nich może to być próba wykonania cd \ web jako polecenia.
źródło
Możesz także spróbować tego z opcją
-t
:źródło
Spróbuj użyć
RemoteCommand
zamiast tego, npźródło