2009-10-27 9 views
14

Chciałbym polecenia, które śledzi maszynę, uruchamia polecenie (cd lub wykonać skrypt lub su), a następnie daje mi powłokę. Przekazanie komendy ssh wydaje się zawsze kończyć.ssh z poleceniem .... Plus powłoka

Niektóre przykłady tego, co szukam: „ssh mnie @ komputera Komputer1«./executeMyScript & & cd/developmentDirectory»”, a następnie daje mi powłokę z powrotem.

Powodem, dla którego chcę to zrobić, jest to, że używam mrxvt (x terminów z zakładkami), który pozwala mi definiować polecenia dla wszystkich moich kart, które będą uruchamiane podczas uruchamiania. Chciałbym mieć kilka połączeń ssh z tą samą maszyną, ale chcę, żeby robili różne rzeczy po tym, jak je zaciągnęli.

-Rob

Dzięki!

Odpowiedz

10

wariacja na innych odpowiedzi naprawdę użyć opcji -t programu ssh, aby wymusić przyznanie pseudo-tty:

ssh -t [email protected] ./executeMyScript '&&' bash -i 
+0

dzięki! przy pierwszej kontroli, która działa dokładnie tak, jak bym chciał! Hurray dla "-t"! – robarson

+0

Mimo że na to pytanie udzielono odpowiedniej odpowiedzi, jeśli ktoś czyta, czy wiesz, jak mogę mieć instancję basha, którą rozpoczynam od tego polecenia, otwórz emacs (tak, że kiedy zamykam emacsa, wraca on do mojego terminala bash) ? Heck ... coś, co otwiera emacs bez bash byłoby dobre (tak, że emacs nie wychodzi natychmiast po uruchomieniu). – robarson

4

Jak o

ssh [email protected] ./executeMyScript '&&' bash -i 

Musisz podać && tak zostanie on przekazany do zdalnej maszynie zamiast połknięte przez miejscową powłoki.

zacytować ';' charakter i można zmienić katalog startowy, TOO:

ssh [email protected] ./executeMyScript '&&' cd /developmentDirectory ';' bash -i 
+0

Dzięki. Wezwanie do basha zadziałało ...infosar, ponieważ dał mi powłokę. Niestety nie działa zbyt dobrze. Proste skróty klawiszowe, takie jak ctrl^a nie działają, co oznacza, że ​​muszę spróbować znaleźć inne rozwiązanie. btw, wypisuje również "bash: brak kontroli zadań w tej powłoce". – robarson

+3

Spróbuj użyć opcji '-t':' ssh -t me @ machine ... ' – mob

2

umieścić coś takiego na końcu skryptu chcesz uruchomić:

bash -li 

który rozpoczyna Bash jako interaktywna powłoka logowania. Nie jest to doskonałe rozwiązanie, ponieważ brakujesz takich funkcji, jak przesyłanie dalej, ale może to być odpowiednie do Twoich potrzeb.

Jeśli to nie wystarcza, to bym po prostu zrobić dwie osobne połączenia SSH, jeden uruchomić skrypt logowania, a drugi do mnie.

+0

+1 dla dwóch oddzielnych poleceń ssh. KISS –

2

Jak na temat korzystania z opcji SendEnv w ssh_config wysłać konkretnego środowiska opcji z komputera lokalnego do zdalnego komputera, a następnie sprawdzanie tej zmiennej środowiskowej w konfiguracji zdalnego hosta?

W swojej .ssh/specjalnego-config-file:

remotehost: 
    SendEnv * 

Lokalny skrypt:

RUN_THIS_FIRST_COMMAND=blah 
ssh -F special-config-file 

Pilot .bash_profile:

if [ "$RUN_THIS_FIRST_COMMAND" != "" ] ; then 
    $RUN_THIS_FIRST_COMMAND 
fi 

Być może trzeba sprawdzić niektóre z tych linii, właśnie wyrzuciłem to ze stron podręcznika i nie próbowałem tego wcześniej. Osobiście nie lubię konieczności modyfikowania mojego lokalnego i zdalnego środowiska dla tego rozwiązania.

0

Działa to dla mnie.

/usr/bin/ssh -t yourdomain.com "cd /directory; bash -i" 
+2

Dlaczego to działa? Podaj więcej szczegółów, aby OP mógł zrozumieć, dlaczego napisałeś to, co zrobiłeś. – rayryeng

+1

To także mniej lub bardziej bezpośrednia kopia istniejącej wybranej odpowiedzi, opublikowanej 4 lata temu ... – Synchro

+0

Wyjaśnienie byłoby miłe. –