2012-02-15 7 views
20

Potrzebuję zalogować się do różnych serwerów, ustawić zmienne środowiskowe, a następnie działać interaktywnie.Czy mogę gdzieś ssh, uruchomić niektóre polecenia, a następnie zostawić mi monit?

np.

$ ssh anvil 
[email protected]$ export V=hello 
[email protected]$ export W=world 
[email protected]$ echo $V $W 
hello world 

Jak mogę połączyć kilka pierwszych poleceń, a następnie zostawić sobie znak zachęty?

Coś jak:

$ ssh anvil --on-login 'export V=hello; export W=world;' 
[email protected]$ echo $V $W 
hello world 

Oczywiście jest to problem modelu. To, o co naprawdę pytam, to: "jak przejść na inną maszynę, wykonać polecenia, a potem kontynuować, jakbym prowadził je ręcznie?"

Odpowiedz

22

Prawdopodobnie najprostszą rzeczą jest:

 
$ ssh -t host 'cmd1; cmd2; sh -i' 

Jeśli chcesz ustawić zmienne, wykonaj następujące czynności:

 
$ ssh -t host 'cmd1; cmd2; FOO=hello sh -i' 

pamiętać, że jest fatalny hack, i można byłoby znacznie lepiej oddanie żądane początkowe polecenia w skrypcie i wykonanie:

 
$ scp setup host:~ 
$ ssh host 
host$ . setup 
+0

To jest dokładnie to, co chciałbym, ale to nie działa tak samo. Mówi rzeczy takie jak "brak kontroli pracy", a strony podręcznika nie używają stronicowania. –

+1

@JohnLawrenceAspden Spróbuj dodać -t –

+0

William, dlaczego mówisz, że to okropny hack. Wydaje się działać jak urok. Czy coś nieoczekiwanego czeka, by mnie ugryźć? Do czego służy -i? –

10

Można również użyć następującego expect scenariusz:

#!/usr/bin/expect -f 
spawn ssh $argv 
send "export V=hello\n" 
send "export W=world\n" 
send "echo \$V \$W\n" 
interact 
+0

To jest super. Wolałbym mieć coś, co pasowałoby do linii poleceń (a więc pojawiają się w historii, notatki, itp.). Ale mogę sprawić, żeby to działało na to, co chcę. Dzięki! –

+0

Niesamowita odpowiedź. Właśnie tego szukałem. –

1

Jest Warto zauważyć, że ssh -t może być rzeczywiście używany do łączenia się z jednym hostem za pośrednictwem innego hosta.

Tak na przykład, jeśli chcesz, aby wykonać polecenie na kowadle, ale kowadło jest dostępny tylko z host brama (przez firewall itp), można zrobić tak:

ssh gateway -t 'ssh anvil -t "export V=hello; export W=world;bash -l";' 

Opuszczanie kowadło, będzie również wylogowanie z bramy (jeśli chcesz pozostać na gatway po opuszczeniu kowadło niż tylko dodać kolejny bash -l przed zamknięcie polecenia.

Powiązane problemy