Nie jestem pewien, w jaki sposób możesz przenieść swój lokalny .zshrc
serwer na serwer zdalny (to bez trwałego przechowywania go tam), to działa dla mnie, aby zmienić moją powłokę logowania na serwerze zdalnym.
Ponieważ jest to wspólne konto, mogę używać zsh
tej metody tylko dla siebie.
Dodaj to do ~/.ssh/config
pliku na komputerze lokalnym.
Host yourServer
HostName <IP, FQDN or DNS resolvable name>
IdentityFile ~/.ssh/<your keyfile>
RemoteCommand zsh -l
RequestTTY force
User <yourUsername>
Może być hackerski sposób na osiągnięcie tego, czego szukasz, na przykład poniżej.
OSTRZEŻENIE Nie ma żadnych gwarancji i nie wygląda na „mądre”, ale udało mi się umieścić mój plik lokalny na serwerze i użyć go w powłoce logowania.
Host someHost
HostName someIP
IdentityFile ~/.ssh/somekey.pem
RemoteCommand zsh -l -c 'sleep 1; source /tmp/somefile; zsh'
PermitLocalCommand yes
LocalCommand bash -c 'sftp %r@%h <<< "put /tmp/somefile /tmp/somefile"'
RequestTTY force
User someUser
Jak to działa?
RemoteCommand
określa, co należy uruchomić po zdalnej stronie.
LocalCommand
określa, co należy uruchomić na komputerze lokalnym, który służy do kopiowania pliku lokalnego na serwer zdalny w celu uzyskania go. Oto haczyk, dzieje się to dopiero po „udanym” połączeniu ze zdalnym hostem.
Znaczenie:
- Twoje połączenie z pilotem powinno być otwarte i żywe
- Twoja zdalna powłoka jeszcze nie ma pliku, więc musi poczekać, aż plik się pojawi, ergo
sleep
- Lokalne zastosowania
sftp
do umieszczenia pliku na serwerze zdalnym, serwer zdalny budzi się sleep
i źródle skryptów.
To jest super hackerskie, chciałbym wiedzieć, czy jest też lepszy sposób.
Aktualizacja: Można tego użyć zamiast „długiego” czasu snu:
RemoteCommand zsh -l -c 'while [[ ! -f /tmp/somefile ]]; do sleep 0.05; done; source /tmp/somefile; zsh'
/etc/shells
aby powłoka była dostępna do wyboru.