Normalnie, jeśli przekażesz polecenie ssh w ten sposób
ssh me@example.com 'some-command.sh'
Otrzymujesz nieinteraktywną sesję i ssh kończy się, gdy tylko polecenie (lub skrypt lub cokolwiek innego) zostanie uruchomione. Jak mogę uzyskać sesję interaktywną, a jednocześnie uruchomić polecenie, które określiłem na moim komputerze lokalnym? Na przykład chciałbym móc otworzyć ekran i zrestartować określoną sesję ekranu:
ssh me@example.com 'screen -r 12345'
ale nie jest to dozwolone, zwracając błąd „Musi być podłączony do terminala”. co, jak zakładam, oznacza w zasadzie „należy wywołać to polecenie z interaktywnej powłoki”.
Jako kolejny przykład używam mnóstwa maszyn w pracy, które często wymagają ode mnie korzystania ze wspólnego konta, aby mieć prawa do robienia pewnych rzeczy (tak, wiem: zły pomysł, ale nie obwiniaj mnie, nie ustawiłem rzeczy, które sposób) i zwykle mają domyślną powłokę ksh. Chciałbym się zalogować, przełączyć na bash (lub zsh) i pobrać plik .bash_profile (lub .zshrc) z mojego konta. Byłoby to łatwe, gdybym mógł ustanowić interaktywną sesję ssh i przekazać polecenie zdalnej maszynie, aby uruchomiło się po zalogowaniu.
Mam na myśli bardzo nieprzyzwoite (i niesprawdzone) rozwiązanie, które opublikuję, ale mam nadzieję, że ktoś zna lepszy sposób.
AKTUALIZACJA: dla tych, którzy nie zdawali sobie z tego sprawy, nie planuję robić tego wszystkiego ręcznie, więc powiedzenie mi, aby otworzyć sesję interaktywną, a następnie zrobić to ręcznie, w rzeczywistości nic nie rozwiązuje.
2. AKTUALIZACJA: Próbuję jeszcze raz wyjaśnić: próbuję uruchomić (dowolne) polecenia na serwerze (programowo określone na kliencie), ale potem mam otwartą sesję interaktywną, na którą wpływ mają wszystkie polecenia programowe.
echo "command" | ssh user@remote_host