Odpowiednik SSH .profile / .bashrc


14

Szukam sposobu automatycznego zdefiniowania niektórych aliasów w mojej sesji na dowolnym serwerze, do którego ssh. Nie mogę umieścić ich w .bashrcplikach na serwerze, ponieważ konta użytkowników, którymi się loguję, są udostępniane przez inne osoby, a poza tym jest ich kilkadziesiąt, a utrzymywanie skryptu na każdym komputerze byłoby bolesne. Wiem, że mógłbym użyć expectautomatycznego wpisywania aliasów, ale zastanawiałem się tylko, czy OpenSSH ma coś wbudowanego, co mogłoby być wykorzystane do osiągnięcia tego celu?

Odpowiedzi:


7

Nie ma nic złego w robieniu tego w oczekiwaniu. Inny sposób, w jaki to zrobiłem, jest również dość brudny, ze skryptem, najpierw scp profil, który chcesz uruchomić, a następnie ssh, uruchom go i pozostań w kontakcie.

Tak więc umieść wszystkie ustawienia profilu w pliku lokalnym .<local username>-<hostname>-init.shi uruchom poniższy skrypt, aby zalogować się do zdalnego hosta.

#!/bin/sh
[ $# -eq 0 ] && { echo "syntax: $0 <host> [<ssh-option>...]" 1>&2 ; exit 1 ; }
host=$1 ; shift    # use any remaining args as ssh options
initfile=".$USER-`hostname`-init.sh"
scp -q ~/.ssh-init.sh "$host:/var/tmp/$initfile"
ssh -t "$@" $host "bash --rcfile /var/tmp/$initfile"

Podoba mi się, ponieważ nie wymaga specjalnej konfiguracji na serwerze, fajnie!
Ramon

4

Możesz umieścić swoją konfigurację .bashrci pozwolić jej na wykonanie tylko po zalogowaniu. Aby to umożliwić, możesz przekazać zmienną środowiskową przez ssh.

.bashrc modyfikacje

# common stuff
if [ -n "$IAMTHEGREATEST" ]; then
  # my personal cool stuff
fi;
# other global stuff

sshd_config modyfikacje:

AcceptEnv ... IAMTHEGREATEST

.ssh/config modyfikacje (po stronie klienta):

Host ...
  SendEnv IAMTHEGREATEST

.bashrc modyfikacje (po stronie klienta):

alias ssh='IAMTHEGREATEST="forsure" ssh'

(niesprawdzony, ale powinien zrobić)


W jaki sposób spełnia to cel automatycznego konfigurowania na dowolnym serwerze, na którym loguje się OP?
womble

To nie. Rozwiązuje część pytania „konta użytkowników, na których loguję się, są udostępniane przez inne osoby”
krissi,

Jest to prawie dokładnie to, co robię, ale z jedną różnicą - zamiast akceptować tę zmienną środowiskową z zewnątrz, ustawiam ją w samym kluczu SSH. Oznacza to, że .ssh / authorized_keys zawiera linie zaczynające się od środowiska = "IAMTHEGREATEST = forsure" ssh-DSS ...
Bron Gondwana

3

Ze strony podręcznika ssh (1) , jeśli utworzysz plik ~ / .ssh / rc , zostanie on wykonany PRZED wykonaniem powłoki logowania użytkownika, dając tym samym szansę na wykonanie zadań „wstępnej konfiguracji” przed zalogowaniem .. Podany przykład dotyczył zamontowania udziałów sieciowych przed zalogowaniem.

Jeśli nie chcesz używać pojedynczych plików ~ / .ssh / rc , możesz zrobić to samo z / etc / ssh / sshrc . Szybki test sprawdzający twoją nazwę użytkownika lub jakąś metodę identyfikacji może uniemożliwić innym nawet zauważenie, że to jest na miejscu.

/ etc / ssh / sshrc jest pozyskiwany TYLKO wtedy, gdy ~ / .ssh / rc nie istnieje, więc możesz skutecznie osiągnąć dwie warstwy złożoności.


ding ding ding - mamy zwycięzcę!
Wstrzymano do odwołania.

Nie trafiłem tego! Wygląda atrakcyjnie, ale nadal będzie wymagał konfiguracji każdego serwera osobno, ponieważ jest po stronie serwera, prawda?
Ramon

tak, po stronie serwera, ale wystarczy przeskanować tylko jeden plik, raz. Naprawdę nie ma łatwego sposobu przesłania strumienia poleceń do przetworzenia natychmiast po zalogowaniu. {Grin} Daj mi jednak trochę, może napisz coś ... {nie dzisiaj!}
lornix

2

Aliasy są definiowane i interpretowane przez powłokę.

Niestety nie ma sposobu, sshaby przekazać je do zdalnej powłoki.

Możesz napisać sshopakowanie po stronie klienta, które tworzy fajne środowisko po drugiej stronie, ale nie byłoby ładnie.


0

Jeśli to możliwe, zapisałbym mały skrypt, który inicjuje / definiuje wszystko, co chcesz na serwerze dostępnym zewsząd i wykonuję go po zalogowaniu na każdym serwerze.


0

Jednym z możliwych rozwiązań byłoby umieszczenie skryptu, który konfiguruje wszystko na serwerze WWW, do którego mają dostęp wszystkie pozostałe serwery.

Następnie każdy serwer powinien potrzebować małego skryptu, aby wykonać coś takiego:

wget http://myserver.com/myawesomescript.sh
chmod +x myawesomescript.sh
./myawesomescript.sh

W ten sposób musisz go zaktualizować tylko w jednym miejscu.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.