Як запустити віддалену команду в PuTTY після входу та зберегти оболонку?


35

Що я намагаюся зробити: запустити сеанс PuTTY з командного рядка, увійти на віддалену машину та cdв наданий каталог.

putty.exe -agent -ssh some.host

Це відкриє сеанс і вхід із моїм ім'ям для входу за замовчуванням та приватним ключем.

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

Це дозволить відкрити сеанс, увійти, виконати команду ( cdу цьому випадку) та вийти .

Як відкрити сеанс, увійти cdта зберегти сеанс відкритим?

Передумови: Я використовую emacs під Windows і часто редагую файли на віддалених машинах Unix за допомогою Tramp & plink. Я хочу зробити гарячу клавішу, яка відкриє сеанс PuTTY для цієї віддаленої машини та chdirs до каталогу цього файлу. З боку emacs не велика справа, але я застряг у PuTTY.

Відповіді:


33

Що потрібно зробити -m, це те, що він змушує PuTTY доручити серверу SSH запустити цю команду ВСТАНОВИТИ оболонки. Отже, як тільки ваша команда закінчується, так і сесія.

Якщо ви хочете запустити оболонку після cdкоманди, вам потрібно явно додати її до своєї cmd.txt, наприклад:

cd /my/path ; /bin/bash

Також -mмає на увазі "пустий" / неінтерактивний режим. Щоб використовувати інтерактивну оболонку, вам потрібно перекрити її за допомогою -tперемикача .

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

Крім того, використовуйте KiTTY з його -cmdперемикачем, який робить те, що ви хочете (і не потрібен тимчасовий файл).


Я спробував це (додавання / bin / bash до cmd.txt), і це не працює. Наскільки я розумію, bash починається в неінтерактивному режимі і, не маючи коду для виконання, виходить. Чи є спосіб запустити інтерактивну оболонку таким чином?
Кірьов Артем Васильович

Тим часом я спробував запустити mc. :-) Не вдалося, і дали деякий вихід:Cannot get terminal settings: Invalid argument (22) TERM environment variable needs set.
Артем В. Киреєв,

Дякую за настанови тут, але, здається, у мене виникає проблема, що намагається використовувати шпаклівку -m "myfile.sh" -tдля підключення до vinycorelinux vm (/ bin / ash). Я отримаю таку помилку: i.imgur.com/QN5oRXC.png (мій сценарій починається з echo ".."неї завжди буде показувати першу букву в моєму сценарії після незаконних символів
Vincent De Smet

якщо я використовую налаштування віддаленої команди в профілі шпаклівки, вона працює
Vincent De Smet

-1

Сеанс бродяги, який ви починаєте в emacs, і сеанс оболонки, який ви запускаєте через шпаклівку, - це абсолютно окремі процеси.

Вам, мабуть, краще перевірити параметри конфігурації Tramp, щоб побачити, чи є спосіб встановити каталог за замовчуванням на хоста в межах вашої конфігурації emacs. Можливо, почніть з параметра tramp-remote-pathконфігурації, як це зафіксовано тут .

Якщо вам потрібно встановити шпаклівку для встановлення з'єднання, ви, ймовірно, хочете встановити ssh-тунель і мати через нього з'єднання emacs / tramp.


Emacs & Tramp тут не мають значення, я додав, що лише для фону. Це не про редагування файлу в emacs, це про відкриття оболонки, щоб зробити щось інше з цим файлом (наприклад, запустити скрипт). Мені набридло "запустити шпаклівку, вибери хоста, потім перейди до потрібного шляху", і хочу це автоматизувати.
Кірєєв Артем Васильович
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.