Jak używać niestandardowego pliku .bashrc podczas logowania SSH

21

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.

gsingh2011
źródło
To nie jest rozwiązanie dla każdego połączenia, ale może się okazać, że jest cenne. Sprawdź bazę na GitHub. Więcej szczegółów w tej odpowiedzi na temat społeczności superużytkowników.
codeforester

Odpowiedzi:

6

Myślę, że chcesz (w .ssh / config na komputerze, z którego się łączysz):

PermitLocalCommand yes
LocalCommand scp yourname@someserver:/dir/dotbash /local/home/dir/.bashrc

możesz wyprowadzić z:

source .bashrc

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.

Quinn Murphy
źródło
Kilka notatek. Po pierwsze, myślę, że zmieniłeś kolejność plików w poleceniu scp, ponieważ chcę przenieść mój bash na serwer i myślę, że masz odwrócone. Po drugie, możesz po prostu dodać ; source /path/to/.bashrcpo 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.
gsingh2011
przepraszam za to! Pracował mi z głowy, więc przepraszam za pomyłkę. Czy jesteś w stanie skonfigurować konfigurację kluczy bez hasła w swoim środowisku? Mamy to w naszym otoczeniu i jest to piękna rzecz. Cieszę się, że to zadziałało!
Quinn Murphy
@ gsingh2011: source /path/to/.bashrcZostanie to wykonane na komputerze, z którego się łączysz. Polecenia w LocalCommandnie mają dostępu do sesji ssh.
Oliver
@Oliver Masz rację. Postanowiłem zautomatyzować pozyskiwanie .bashrc ze zdalnego komputera. Muszę zmienić kilka rzeczy po stronie serwera przy pierwszym logowaniu, ale jest to o wiele wygodniejsze niż to, co musiałem zrobić wcześniej.
gsingh2011
16

Myślę, że sshrc jest tym, czego szukasz: https://github.com/Russell91/sshrc

sshrc działa tak samo jak ssh, ale po zdalnym zalogowaniu się pozyskuje ~ / .sshrc.

$ echo "echo welcome" > ~/.sshrc
$ sshrc me@myserver
welcome

$ echo "alias ..='cd ..'" > ~/.sshrc
$ sshrc me@myserver
$ type ..
.. is aliased to `cd ..'

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.

RussellStewart
źródło
Przestań spamować za pomocą postów zawierających tylko linki. Możesz doskonale dodawać komentarze (w każdym razie są to Twoje posty związane z sshrc).
Deer Hunter
3
Pracuję nad naprawieniem ich wszystkich!
RussellStewart
Gotowy. Po raz pierwszy kusiło mnie, aby napisać krótki post z linkiem. Teraz wiem lepiej.
RussellStewart
1
Dawno, dawno temu (przed sshrc) napisałem podobny sshrc: github.com/fsquillace/pearl-ssh Jest to po prostu bardziej wydajne, małe i bez żadnych zależności xxd.
user967489
1

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.

Dr Edward Morbius
źródło
0

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ć

/home/foobar/configs/.bashrc
/home/foobar/configs/.foo/bar.conf
...

a następnie a

scp -r /home/foobar/configs/* foo@example.com:/home/foo/

To oszczędza czas.

Christopher Perrin
źródło
0

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:

  1. Skonfiguruj zdalny katalog domowy podczas pierwszego logowania.
  2. Użyj NFS, aby zamontować katalog domowy zawierający .bashrc na każdym serwerze. W ten sposób masz wszędzie te same ustawienia.
  3. Jeśli nie masz nic przeciwko, aby niektóre zmienne środowiskowe zostały przesłane na zdalne serwery, powinieneś sprawdzić SendEnvopcję ( ssh_configwięcej informacji znajdziesz na stronie man). Jeśli serwer jest poprawnie skonfigurowany (tzn. Ma odpowiednią wartość AcceptEnvw sshd_config), możesz użyć SendEnvdo skopiowania zmiennych środowiskowych na zdalny host.
  4. Nie wiem, czy to działa, ale być może możesz źle użyć tego ProxyCommandustawienia (patrz ssh_configstrona podręcznika ), aby przesłać swoje .bashrclub 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.
Oliver
źródło
0

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:

  • Nie wymaga zależności od xxd dla obu hostów (które mogą być niedostępne na zdalnym hoście)
  • Pearl-ssh wykorzystuje wydajniejszy algorytm kodowania
  • To tylko ~ 20 linii kodu (naprawdę łatwe do zrozumienia!)

Na przykład:

$> echo "alias q=exit" > ~/.config/pearl/sshrc
$> ssh_pearl myuser@myserver.com
myserver.com $> q
exit
użytkownik967489
źródło