Mam sytuację, w której kilku użytkowników udostępnia to samo konto użytkownika na zdalnym komputerze. Mam katalog „osobisty”, w którym napisałem własny .zshrc
plik, i chciałbym mieć sposób na:
- Rozpocznij sesję ssh na zdalnym komputerze z dyrektywami z mojego pliku konfiguracyjnego ssh (np.
ControlMaster auto
) - Ta sesja uruchamia powłokę Z.
- Działa
.zshrc
w moim „osobistym” katalogu (nie w katalogu osobistym współdzielonego użytkownika)
Byłoby miło mieć alias lub prosty sposób na rozpoczęcie takich sesji ssh (dlatego pomyślałem o użyciu pliku konfiguracyjnego OpenSSH), ale jestem otwarty na wszelkie inne pomysły!
Korzystasz z pliku konfiguracyjnego OpenSSH?
Czytałem na ssh_config OpenSSH w manualu , że mogę użyć dyrektywy LocalCommand
określić komendę, aby uruchomić lokalnie po pomyślnym podłączeniu do serwera. To sprawiło, że pomyślałem, że może istnieć sposób, aby powiedzieć config
plikowi, które polecenie uruchomić zdalnie po połączeniu z serwerem, ale wydaje się, że nie ma.
ssh mycommand
? A jeśli chcesz uruchomić jakieś polecenie instalacyjne przed każdym poleceniem pojawiającym się po ssh, dlaczego nie skonfigurować strony serwera?.zshrc
w określonym katalogu (tj. „Osobistym” katalogu domowym). Próbowałem,ssh -t host_name 'zsh & source /path/to/my_zshrc'
ale to nie zadziałało (mamFPATH variable not defined
, i myślę, że to dlatego, żezsh
kończy się przed uruchomieniemmy_zshrc
, nie mówiąc już o tym, że nie dało mi to powłoki Z)Odpowiedzi:
Najbardziej oczywistym sposobem na zdalne uruchomienie polecenia jest podanie go w wierszu polecenia ssh. Polecenie ssh jest zawsze interpretowane przez powłokę użytkownika zdalnego.
Wspólne konta to ogólnie zły pomysł; jeśli to możliwe, uzyskaj osobne konta dla każdego użytkownika. Jeśli utkniesz na wspólnym koncie, możesz utworzyć alias:
Jeśli używasz uwierzytelniania za pomocą klucza publicznego (ponownie zalecane), możesz zdefiniować polecenia dla poszczególnych kluczy w
~/.ssh/authorized_keys
. Zobacz tę odpowiedź, aby uzyskać więcej wyjaśnień. Edytuj wiersz swojego klucza~/.ssh/authorized_keys
na serwerze (wszystko w jednym wierszu):źródło
exec
poleceniu. Czymexec zsh
różni się odzsh
bezpośredniego połączenia ? Dlaczego jest to ważne w tym konkretnym przypadku?ssh -t [email protected] 'HOME=~/bob; exec zsh'
, dostajęHOME=~/bob: command not found
. Myślę, że jestem włączonytcsh
. Mam ten sam problem, jeśli spróbujęHOME=/home/bob
. Próbowałem na bash i zsh. Wszelkie wskazówki, co może być tego przyczyną? Wreszcie, czy powyższa składnia zostawi mnie z otwartą sesją ssh? (czego chcę). Dzięki jeszcze raz.exec
zamienia oryginalną powłokę na zsh; bezzsh
, oryginalna powłoka pozostałaby w pamięci, dopóki zsh nie wyjdzie, a następnie wyjdzie. Główną różnicą jest oszczędność pamięci, nie jest to bardzo ważne. Jeśli twoją powłoką logowania jest (t) csh, użyjsetenv HOME ~/bob; exec zsh
. Wreszcie, ponieważ zsh jest uruchamiany bez argumentów, otrzymujesz sesję powłoki, tak jak byś tossh
zrobił, gdybyś właśnie uruchomił i miał zsh jako powłokę logowania.exec zsh
poleceniu?ZDOTDIR
aby zsh szukał plików kropek w innym katalogu. Jeśli masz pewną kontrolę nad kropka plików to można zrobić coś takiego dodatkueval $LC_STARTUP_CODE
do$ZDOTDIR/.zshrc
i przekazać kod do wykonania w zmiennej środowiskowejLC_STARTUP_CODE
.Aby uruchomić polecenie zdalnie po podłączeniu serwera, dodaj do pliku .ssh / config następujący fragment kodu
źródło
LocalCommand
dyrektywa ma uruchamiać polecenie na lokalnej powłoce, a nie na zdalnej powłoce.