Jeśli chcesz tylko wysłać PS1
zmienną, która nie zawiera '
(pojedynczego cudzysłowu), spróbuj:
ssh targethost -t "PS1='$PS1'; exec bash"
Lokalny .bashrc
może PS1
jednak nadpisać (dzięki Dennis Williamson za zwrócenie na to uwagi).
Istnieją sposoby przesyłania zmiennych środowiskowych przez ssh , ale zwykle są one wyłączone w konfiguracji serwera. Jeśli PermitUserEnvironment
dyrektywa jest włączona w konfiguracji serwera, a każdy użytkownik ma własną parę kluczy (tak, możesz nie mieć tyle szczęścia), możesz dodać environment="PS1=…"
do linii ~/.ssh/authorized_keys
odpowiadającą kluczowi.
Jeśli chcesz zachować własną konfigurację na wspólnym koncie użytkownika, możesz utworzyć własny katalog plików konfiguracyjnych i ustawić HOME
zmienną środowiskową tak, aby wskazywała ten katalog.
ssh targethost mkdir mrstatic.home
scp .bashrc targethost:mrstatic.home/
Utwórz dowiązania symboliczne w mrstatic.home
katalogu wskazujące odpowiedni wpis w katalogu nadrzędnym, gdy chcesz udostępnić plik innym użytkownikom.
Następnie zaloguj się za pomocą
ssh targethost -t 'HOME=~/mrstatic.home; exec bash'`
Jeśli chcesz zmodyfikować zdalny .profile
(lub inny plik inicjujący), prawdopodobnie możesz zautomatyzować swoje ustawienia. Wiele witryn zezwala na LC_*
zmienne środowiskowe (zwykle są używane do ustawień regionalnych). Jeśli oba te warunki są spełnione, możesz ustawić zmienną, która nie jest używana w lokalizacjach, powiedzmy LC_USER
, po stronie klienta i przetestować ją na serwerze .profile
.
(Oczywiście wspólne konta to zły pomysł, ale zdaję sobie sprawę, że możesz nie być w stanie zmienić tej sytuacji).
"PS1='$PS1' bash -i"
(i dlaczego nieexec
też)?PS1
zastąpienie go podczas uruchamiania powłoki nie byłoby niczym niezwykłym . Bez exec: podczas testowania na moim systemie nie miało to żadnego znaczenia - bez dodatkowego procesu..bashrc
prawdopodobnie nadpiszePS1
.Umieść swój monit PS1 w ~ / .ssh / environment, a sesja ssh przeniesie go do każdego zalogowanego hosta. Działa dla mnie z openssh 4.3p2.
źródło
PermitUserEnvironment
, która jest domyślnie wyłączona.możesz określić zmienne środowiskowe po stronie klienta, a jeśli serwer ssh na to pozwala (sprawdź man sshd-config), zmienne te są kopiowane do sesji po zalogowaniu się do komputera.
więc musisz skonfigurować .bashrc na serwerze, aby sprawdzić istniejącą PS1 (lub dowolną zmienną) i ustawić PS1 tylko wtedy, gdy nie jest jeszcze ustawione.
lub, co upraszcza, łączenie ustawień w funkcję .. i wdrażanie tej funkcji jako specjalny plik źródłowy na żądanie (
source joes_bashrc
) lub bezpośrednio w .bashrc. posiadanie własnego pliku wydaje się nieco bardziej niezawodne. inni ludzie mogą korzystać z twoich ustawień, ale nie są do tego zmuszeni.źródło
Nie udostępniaj loginów. SSH jak ty, a następnie zrób
sudo -su shareduser
(-s
oznacza „shell”).Stwórz
sudo
swój katalog domowy:źródło
Jeśli chcesz to zrobić bez potrzeby dodatkowego scp, możesz zrobić coś takiego:
ssh -t srvname ' cp ~/.bashrc ~/.bashrc.n &>/dev/null ; echo "LS_COLORS=\"no=00:fi=00:ETC:ETC:ETC\";" >> ~/.bashrc.n ; echo "export LS_COLORS" >> ~/.bashrc.n ; echo "alias ls=\"ls --color=auto\";" >> ~/.bashrc.n ; exec bash --rcfile ~/.bashrc.n'
To wygeneruje plik .bashrc.n oparty na serwerach bashrc, ale z twoimi zastąpieniami.
źródło
Jeśli jesteś skłonny wtrącać niepostrzeżenie na swoich kolegów, i można im zaufać, aby nie kolidować z własnymi preferencjami, to proponuję kombinację odpowiedzi Cyrusa , odpowiedź Akiry i odpowiedzi Dennisa Williamsona .
~/.bashrc
i dodaj na końcu. Podczas gdy twoi koledzy „nie doceniliby [pisania] profilu podstawowego”, nie będą tego świadomi, chyba że zaczną go szukać.Uważam, że jest to dość jasne, ale:
ssh
polecenie powoduje ustawienieUnf
zmiennej na zdalnym serwerze po zalogowaniu się do niego. Spowoduje to wywołanie Twojego kodu na pilocie.bashrc
, co spowoduje wprowadzenie Twoich dostosowań. Ponieważ umieścisz kod na końcu.bashrc
, zastąpi on ogólne ustawienia wcześniej w pliku.Ujawnienie: Nie testowałem tego.
źródło
Najprostszym sposobem jest IMHO:
źródło
PROMPT_COMMAND
(które uruchamia się za każdym razem, gdy powłoka wydaje monit) wydaje się bardzo trudnym sposobem rozwiązania tego problemu. A ponieważ jest to nieco tajemnicze, każda odpowiedź sugerująca, że naprawdę powinna zawierać wyjaśnienie, jak to działa.Możesz robić rzeczy takie jak montowanie domu na sshfs / nfs, ale najłatwiejszym rozwiązaniem jest przeszukanie twojego bashrc na nowej maszynie. To także przynosi aliasy i takie tam.
źródło