Przekonałem się, że w nowej firmie, z którą współpracuję, często muszę uzyskiwać dostęp do serwerów linuksowych o stosunkowo krótkim czasie życia. Na każdym z tych serwerów mam konto, ale za każdym razem, gdy tworzony jest nowy, muszę przejść problem z przeniesieniem przez mój .bashrc. Możliwe jednak, że za około miesiąc tego serwera już nie będzie. Muszę również uzyskiwać dostęp do wielu innych serwerów przez krótki czas (minuty), gdzie po prostu nie warto przesyłać przez mój plik .bashrc, ale ponieważ pracuję na wielu serwerach, stanowi to dużo straconego czasu.
Nie chcę niczego zmieniać na serwerach, ale zastanawiałem się, czy istnieje sposób na utworzenie „per-connection” .bashrc, więc za każdym razem, gdy chciałbym SSH do serwera, moje ustawienia byłyby używane dla tej sesji.
Jeśli to możliwe, byłoby miło, gdybym mógł zrobić to samo z innymi plikami konfiguracyjnymi, takimi jak pliki gitconfig.
źródło
Odpowiedzi:
Myślę, że chcesz (w .ssh / config na komputerze, z którego się łączysz):
możesz wyprowadzić z:
i bądź na wesołej drodze. LocalCommand wykonuje polecenie na serwerze, z którym się łączysz, gdy się tam dostanie, tuż przed faktyczną sesją.
Chciałbym również upewnić się, że sshds na serwerach są skonfigurowane z
PermitLocalCommand yes
Istnieje wiele sposobów na ulepszenie LocalCommand, aby działało w twoim konkretnym środowisku - możesz zwinąć się z wewnętrznego serwera WWW lub na przykład ściągnąć z montowania nfs.
źródło
; source /path/to/.bashrc
po poleceniu scp, aby automatycznie go pozyskać. Wreszcie, niezbyt ważnym minusem tej metody jest to, że muszę dwukrotnie wpisać hasło. Ale w końcu się udało, więc dzięki.source /path/to/.bashrc
Zostanie to wykonane na komputerze, z którego się łączysz. Polecenia wLocalCommand
nie mają dostępu do sesji ssh.Myślę, że sshrc jest tym, czego szukasz: https://github.com/Russell91/sshrc
Możesz użyć tego do ustawiania zmiennych środowiskowych, definiowania funkcji i uruchamiania komend po zalogowaniu. To takie proste i nie wpłynie na innych użytkowników na serwerze - nawet jeśli używają również sshrc. Aby uzyskać bardziej zaawansowaną konfigurację, kontynuuj czytanie.
źródło
Jeśli nigdy wcześniej nie trafiłeś na serwer, w ~ / .ssh / known_hosts nie będzie dla niego żadnego wpisu.
Możesz wyszukać danego znanego hosta za pomocą „ssh-keygen -F”, ale będziesz musiał przetestować to wyjście (grep), ponieważ ssh-keygen nie zwraca false za brak. Pamiętaj, że jeśli odwołujesz się do hosta przy użyciu różnych identyfikatorów (adres IP, nazwa hosta, nazwa FQDN), każdy z nich jest traktowany jako osobna instancja.
Możesz napisać opakowanie dla ssh, które przenosi środowisko użytkownika do tego hosta przy pierwszym logowaniu:
ssh-newenv () {if! ssh-keygen -F $ 1 | grep -q "^ # host $ 1 znaleziono:"; następnie rsync ~ / .bashrc ~ / .bash_profile ~ / .bash_logout $ 1:.; fi; ssh 1 USD; }
Jeśli chcesz uczynić to bardziej niezawodnym, możesz sprawdzić istnienie znanego pliku środowiska, skrótu lub innego znacznika na zdalnym hoście.
źródło
Nie wiem, czy jest jedna sesja .bashrc.
Innym rozwiązaniem byłoby napisanie małego skryptu, który przenosi wszystkie ulubione konfiguracje do nowego folderu domowego.
Może po prostu utwórz folder ze wszystkimi konfiguracjami ze ścieżkami i po prostu przenieś je za pomocą scp
lubić
a następnie a
To oszczędza czas.
źródło
Nie sądzę, że jest to możliwe, biorąc pod uwagę, że ssh nie ma nic wspólnego z twoim
.bashrc
. To powłoka ładuje ten plik, a nie ssh.Jakieś pomysły:
SendEnv
opcję (ssh_config
więcej informacji znajdziesz na stronie man). Jeśli serwer jest poprawnie skonfigurowany (tzn. Ma odpowiednią wartośćAcceptEnv
w sshd_config), możesz użyćSendEnv
do skopiowania zmiennych środowiskowych na zdalny host.ProxyCommand
ustawienia (patrzssh_config
strona podręcznika ), aby przesłać swoje.bashrc
lub inne pliki przed połączeniem ze zdalnym hostem. Wymagałoby to jednak pewnych testów. Przygotuj się, że może to zakłócać działanie scp.źródło
Myślę, że https://github.com/fsquillace/pearl-ssh robi to, czego potrzebujesz.
Napisałem to dawno temu, zanim narodził się sshrc i ma więcej zalet w porównaniu do sshrc:
Na przykład:
źródło