Jak uruchomić zdalne polecenie w PuTTY po zalogowaniu i utrzymać działanie powłoki?

34

Co próbuję zrobić: rozpocznij sesję PuTTY z wiersza poleceń, zaloguj się do zdalnego komputera i cddo podanego katalogu.

putty.exe -agent -ssh some.host

Spowoduje to otwarcie sesji i zalogowanie przy użyciu mojej domyślnej nazwy logowania i klucza prywatnego.

echo cd /some/remote/path/ > c:/stuff/cmd.txt
putty.exe -agent -ssh some.host -m 'c:/stuff/cmd.txt'

Spowoduje to otwarcie sesji, zalogowanie się, wykonanie polecenia ( cdw tym przypadku) i wyjście .

Jak otworzyć sesję, zalogować się cdi utrzymać sesję otwartą?

Tło: Używam emacsa pod oknami i często edytuję pliki na zdalnych komputerach z systemem Unix za pomocą tramp & plink. Chcę utworzyć skrót, który otwiera sesję PuTTY dla tego zdalnego komputera i chdirs do katalogu tego pliku. Nie jest to wielka sprawa ze strony emacsa, ale utknąłem z PuTTY.

Artyom V. Kireev
źródło

Odpowiedzi:

31

Co -mrobi jest, że to sprawia, PuTTY instruować serwer SSH, aby uruchomić tę komendę (y) zamiast powłoki. Kiedy skończy się twoje polecenie, sesja się kończy.

Jeśli chcesz uruchomić powłokę po cdpoleceniu, musisz dodać ją jawnie do swojego cmd.txt, na przykład:

cd /my/path ; /bin/bash

Również -mimplikuje / tryb non-interactive "nopty". Aby użyć interaktywnej powłoki, musisz zastąpić ją za pomocą -tprzełącznika .

putty.exe -ssh example.com -m "c:\path\cmd.txt" -t

Alternatywnie użyj KiTTY z -cmdprzełącznikiem, który robi to, co chcesz (i nie potrzebuje pliku tymczasowego).

Martin Prikryl
źródło
Próbowałem tego (dodając / bin / bash do cmd.txt) i to nie działa. O ile rozumiem, bash rozpoczyna się w trybie nieinteraktywnym i, nie mając kodu do wykonania, kończy działanie. Czy istnieje sposób na uruchomienie interaktywnej powłoki w ten sposób?
Artyom V. Kireev,
Tymczasem próbowałem uruchomić mc. :-) Nie udało się i dostarczyło trochę danych wyjściowych:Cannot get terminal settings: Invalid argument (22) TERM environment variable needs set.
Artyom V. Kireev
Dzięki za wytyczne tutaj, ale wydaje mi się, że mam problem z próbą użycia putty -m "myfile.sh" -tdo połączenia z tinycorelinux vm (/ bin / ash). Otrzymam następujący błąd: i.imgur.com/QN5oRXC.png (mój skrypt zaczyna się od echo ".."niego, zawsze wyświetla pierwszą literę w moim skrypcie po niedozwolonych znakach
Vincent De Smet
jeśli użyję skonfiguruj zdalne polecenie w profilu szpachli, to działa
Vincent De Smet
-1

Sesja tramp, którą zaczynasz w emacs i sesja powłoki uruchamiana przez putty, są całkowicie oddzielnymi procesami.

Prawdopodobnie lepiej jest sprawdzić opcje konfiguracji dla trampa, aby sprawdzić, czy istnieje sposób na ustawienie domyślnego katalogu dla hosta w konfiguracji emacsa. Może zacznij od tramp-remote-pathopcji konfiguracji, jak tutaj udokumentowano .

Jeśli potrzebujesz użyć putty do nawiązania połączenia, prawdopodobnie chcesz skonfigurować tunel ssh i połączyć przez to emacs / tramp.

Doug Harris
źródło
Emacs i tramp nie mają tu znaczenia, dodałem to tylko dla tła. Nie chodzi o edycję pliku w emacsie, chodzi o otwarcie powłoki, aby zrobić coś innego z tym plikiem (np. Uruchomić skrypt). Mam dość „zacznij szpachlować, wybierz hosta, a następnie przejdź na ścieżkę, której potrzebujesz” i chcę to zautomatyzować.
Artyom V. Kireev,