Откройте сессию SSH с определенным заголовком из командной строки


0

У меня есть небольшая проблема с выполнением putty (из командной строки) с аргументом -m . Пожалуйста, помогите мне с этим, или предложите лучший способ, если вы знаете один :)

Команда (из «Выполнить»):

putty -ssh user@machine -pw password -m C:\test.txt

Команда "test.txt":

PROMPT_COMMAND='echo -ne "\033]0;'$( ifconfig | head -2 | tail -1 | awk '{print $2}')'\007"'

Проблема:
он открывает сессию, а затем сразу же закрывается

Что он должен делать: Открыть сессию ssh из командной строки с определенным заголовком

Благодарю.


У меня нет ssh, чтобы проверить его прямо сейчас, но derkeiler.com/Newsgroups/comp.security.ssh/2012-04/… «Если вы просто хотите, чтобы окно оставалось открытым, чтобы вы тоже на него смотрели, отложите сон 10 в конце вашего скрипта на 10 секунд ожидания. Если вы хотите использовать оболочку, используйте exec / bin / bash в конце Shai " superuser.com/questions/587629/… superuser.com/questions/385715/…
Бароп

Ответы:


1

Я полагаю, вы пытались сделать что-то подобное, как в этом ответе . Но дело в том, что примеры команд, представленных там, должны выполняться из файла на сервере.

Они не могут быть переданы как команда (ы) для выполнения с помощью ключа -m. Этот переключатель PuTTY должен имитировать поведение SSH-клиента командной строки Linux:

ssh user@foo command

Таким образом, SSH регистрирует userна fooсервере, работает commandтам и просто выходит. Похоже, с -m PuTTY делает то же самое.

Мое предложение

это подготовить скрипт на удаленном сервере и настроить PuTTY другим способом. Прежде всего, вам нужно создать файл с командами, которые вы хотели бы запустить после входа в систему, давайте назовем его.title

cat > ~/.title

Затем просто введите или скопируйте и вставьте все, что вам нужно, затем нажмите Ctrl + D. А пока давайте просто протестируем установку заголовка:

echo -ne "\033]0;PuTTY\007"

Вы даже можете попробовать выше прямо в терминале. Если заголовок окна PuTTY не изменяется, скорее всего, в вашем дистрибутиве уже установлена переменная PROMPT_COMMAND по умолчанию . Вы можете подтвердить это, выполнив следующие команды в терминале

echo $PROMPT_COMMAND
unset PROMPT_COMMAND
echo -ne "\033]0;PuTTY test\007"

Ключ должен сбросить текущее значение PROMPT_COMMANDпеременной. Тогда последняя команда должна установить заголовок окна в PuTTY test.

Мое решение

для меня работает подготовка сессии в PuTTY с установленным для графического интерфейса «Удаленная команда» :

/bin/bash --rcfile ~/.title

Просто не забудьте указать название этого сеанса (например, SessionName) и нажмите кнопку «Сохранить» на первой странице настроек PuTTY, рядом со списком «Сохраненные сеансы» :)

Затем вы можете запустить PuTTY и сказать ему, чтобы загрузить эту сессию

putty -load SessionName -l user -pw password

Да, это печально, но для сохраненного сеанса нет эквивалента в командной строке поля «Удаленная команда». Вот почему нужно преодолеть все эти препятствия :(

TL; DR версия

Предполагая, что вы делаете все эти шаги правильно, все должно работать нормально:

  • создать ~/.titleскрипт на удаленной машине
  • подготовить сеанс с удаленной командой, которая запускает Bash, который выполнит ~/.title
  • скажите PuTTY для загрузки подготовленной сессии при запуске, указав имя пользователя и пароль

Pro tip

Вместо того, чтобы указывать пароли в текстовом виде в командной строке (и, возможно, в сценариях), вы должны научиться использовать ключи SSH и запускать «Pageant» (агент проверки подлинности PuTTY) в панели задач Windows.


Отличный первый ответ. Добро пожаловать в Супер пользователя.
Энтони Геогеган

Я надеялся избежать запуска скрипта на удаленной машине, но, похоже, другого пути нет. Спасибо всем, кто ответил, я новичок здесь, поэтому я не могу голосовать пока: X
igor

0

У меня нет ssh для тестирования прямо сейчас, но http://www.derkeiler.com/Newsgroups/comp.security.ssh/2012-04/msg00005.html "Если вы просто хотите, чтобы окно оставалось открытым для вы тоже посмотрите, поместите sleep 10 в конце вашего скрипта на 10 секунд ожидания. Если вы хотите использовать оболочку, используйте exec /bin/bashв конце. Shai "

две другие ссылки, которые предлагают некоторое понимание.

PuTTY: Запустите удаленную команду после входа в систему и продолжайте работу оболочки

Как выбрать то, что отображается в строке заголовка PuTTY из Linux?

Добавил барлоп

следующее не использует putty, оно использует openssh в cygwin. a.aФайл может содержать ls или команды для изменения приглашения. Это местное.

$ ssh 127.0.0.1 "cat | bash" < a.a

см. ответ, который я только что опубликовал - https://unix.stackexchange.com/questions/87405/how-can-i-execute-local-script-on-remote-machine-and-include-arguments/208952#208952


Прежде всего, "exec / bin / bash" действительно помог. Теперь он не закрывает сеанс, НО не выполняет "PROMPT_COMMAND = ...", который я написал в описании. Странно то, что он работает с разными командами. Например: if "test.txt" был: "ls -a PROMPT_COMMAND = 'echo ... exec / bin / bash" все работает, но не команда PROMPT
igor

@igor, что если вы поставите PROMPT_COMMAND после exec?
Barlop

тот же результат :( Он отображает ls -a (я взял это только для примера), но не выполняет PROMPT
igor

Важно сказать, что команда работает на открытом сеансе. Я пытался с "-t", как это было предложено в ссылке, которую вы послали, но, к сожалению, те же результаты.
Игорь

Хорошо, теперь у меня есть ssh на машине для тестирования .. и ./bin/bash или exec / bin / bash просто сбивает его, он не вызывает приглашение. Я оставлю здесь свой «ответ», так как это было что-то, по крайней мере, попробовать, и, возможно, комментарии могут быть интересны для некоторых.
Бароп
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.