Как запустить удаленную команду в 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 запускать эту команду (команды) INSTEAD оболочки. Так что, как только ваша команда завершится, сессия завершится.

Если вы хотите запустить оболочку после cdкоманды, вам нужно явно добавить ее к вашей cmd.txt, например:

cd /my/path ; /bin/bash

Кроме того, -mподразумевается "nopty" ​​/ неинтерактивный режим. Чтобы использовать интерактивную оболочку, вы должны переопределить ее, используя -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.
Артем В. Киреев
Спасибо за рекомендацию здесь, но у меня, кажется, есть проблема, пытаясь использовать putty -m "myfile.sh" -tдля подключения к tinycorelinux vm (/ bin / ash). Я получу следующую ошибку: i.imgur.com/QN5oRXC.png (мой сценарий начинается с echo ".."него, он всегда будет показывать первую букву в моем сценарии после недопустимых символов
Винсент Де Смет,
если я использую команду configure remote в профиле замазки, она работает
Vincent De Smet
-1

Сеанс tramp, который вы запускаете в emacs, и сеанс оболочки, который вы запускаете через putty, являются совершенно отдельными процессами.

Возможно, вам лучше проверить параметры конфигурации для tramp, чтобы увидеть, есть ли способ установить каталог по умолчанию для каждого хоста в вашей конфигурации emacs. Возможно, начните с tramp-remote-pathварианта конфигурации, как описано здесь .

Если вам нужно использовать putty для установления соединения, вы, вероятно, захотите настроить ssh-туннель и через него подключиться через emacs / tramp.

Даг Харрис
источник
Emacs и tramp здесь не имеют значения, я добавил это только для фона. Дело не в редактировании файла в emacs, а в открытии оболочки, чтобы сделать что-то еще с этим файлом (например, запустить скрипт). Я устал от «запуска шпаклевки, выберите хост, затем перейдите к нужному пути» и хочу автоматизировать это.
Артем Васильевич Киреев