Сценарии PuTTY для входа на хост

Я использую PuTTY для удаленного входа на хост моей школы. При входе в систему мы должны выполнить следующие действия:

  1. введите имя пользователя
  2. введите пароль
  3. команда "добавить oracle"
  4. команда "sqlplus"
  5. введите имя пользователя
  6. введите пароль

Я буду входить в этот хост много в течение этого семестра, и я надеялся создать сценарий, который устранит избыточность вышеуказанный шаг. Игнорируя очевидные упущения безопасности с моим паролем в скрипте, как бы я этого достиг? У меня нулевой опыт работы со сценариями, поэтому ваши отзывы очень ценятся. Спасибо!

Edit: я играл с параметрами командной строки для шпатлевки, и я смог обойти шаги 1-2, используя:

putty -load "host" -l username -pw password

Я также создал файл оболочки, который выглядит так:

#!/bin/bash

add oracle10g
sqlplus username password

когда я пытаюсь добавить эту опцию в командную строку с помощью-m вариант, похоже, что шпатлевка входит в хост, а затем сразу выходит. Есть ли способ сохранить сеанс открытым после запуска файла оболочки или я неправильно использую параметр-m? Вот ссылка на руководство PuTTY, которое я следовал:http://the.earth.li / ~sgtatham/putty/0.60/htmldoc/Chapter3.html.

вот все, что я пытаюсь запустить из командной строки:

putty -load "host" -l username -pw password -m c:test.sh

7 ответов


понял это с помощью друга. The -m опция PuTTY завершит сеанс сразу после выполнения файла оболочки. Вместо этого я создал пакетный скрипт под названием putty.bat С этим содержимым на моей машине Windows:

@echo off
putty -load "host" -l username -pw password

это регистрирует меня удаленно на хост Linux. На стороне хоста я создал файл оболочки под названием sql С этим содержанием:

#!/bin/tcsh

add oracle10g
sqlplus username password

используется сборка Linux моего хоста tcsh. Другие версии Linux может использовать bash, поэтому просто замените tcsh на bash, и все будет в порядке.

подводя итог, автоматизация этих шагов теперь выполняется в два простых шага:

  1. дважды щелкните значок putty.bat. Это открывает PuTTY и регистрирует меня в Хосте.
  2. выполнить команду tcsh sql. Это добавляет инструмент oracle на мой хост и регистрирует меня в базе данных sql.

Я не уверен, почему предыдущие ответы не предложили, чтобы оригинальный плакат создал профиль оболочки (bashrc,.tcshrc, etc.), которые выполняли свои команды автоматически каждый раз, когда они входят в систему на стороне сервера.

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

Я придумал два решения, оба из которых работали:

(фон) у меня есть папка с различными ярлыками шпатлевки, каждый со свойством "target" на вкладке ярлыков выглядит примерно так:

"C:\Program Files (x86)\PuTTY\putty.exe" -load host01

С каждой нагрузкой, соответствующей профилю шпатлевки, который я сохранил (с разными хостами на вкладке "сеанс"). (В основном они отличаются только цветовыми схемами - мне нравится, чтобы каждая группа связанных задач имела общую цветовую схему в окне терминала с критическими задачами, такими как вход в систему как root в производственной системе, выполняется только в цвету окна.)

свойства Windows папки установлены на очень чистый и раздели - он функционирует как небольшая консоль с ярлыками для каждого из моих частых удаленных соединений шпатлевки и RDP.

(Решение 1) Как упоминалось в других ответах, переключатель-m используется для настройки скрипта на стороне Windows для запуска, переключатель-t используется для подключения, но я обнаружил, что он чувствителен к порядку, если я хочу получить это бежать, не выходя

что я, наконец, получил на работу после многих проб и ошибок было:

(контекстное поле):

"C:\Program Files (x86)\PuTTY\putty.exe" -t -load "SSH Proxy" -m "C:\Users\[me]\Documents\hello-world-bash.txt"

где выполняемый файл выглядел как

echo "Hello, World!"
echo ""
export PUTTYVAR=PROXY
/usr/local/bin/bash

(точка с запятой не требуется)

это запускает команду сценария (в моем случае просто печатает "Hello, world" на терминале) и устанавливает переменную, с которой может взаимодействовать мой удаленный сеанс.

Примечание для отладки: при запуске PuTTY it загружает скрипт-m, Если вы редактируете скрипт, вам нужно повторно запустить PuTTY вместо того, чтобы просто перезапустить сеанс.

(решение 2) Этот метод чувствует себя намного чище, так как мозги находятся на удаленной стороне Unix вместо локальной стороны Windows:

из Putty master session (не "редактировать настройки" из существующего сеанса) загрузите сохраненную конфигурацию и на вкладке SSH установите удаленную команду:

export PUTTYVAR=GREEN; bash -l

тогда, в мои .bashrc, у меня есть раздел, который выполняет различные действия на основе этой переменной:

case ${PUTTYVAR} in
  "")
    echo "" 
    ;;
  "PROXY")
    # this is the session config with all the SSH tunnels defined in it
    echo "";
    echo "Special window just for holding tunnels open." ;
    echo "";
    PROMPT_COMMAND='echo -ne "3]0;Proxy Session @master01$7"'
    alias temppass="ssh keyholder.example.com makeonetimepassword"
    alias | grep temppass
    ;;
  "GREEN")
    echo "";
    echo "It's not easy being green"
    ;;
  "GRAY")
    echo ""
    echo "The gray ghost"
    ;;
  *)
    echo "";
    echo "Unknown PUTTYVAR setting ${PUTTYVAR}"
    ;;
esac

(решение 3, несудите)

также должно быть возможно, чтобы bash пропустить Мой .bashrc и выполнить другой сценарий запуска, поместив это в поле команды PuTTY SSH:

bash --rcfile .bashrc_variant -l 

при использовании -m опция putty не выделяет tty, она запускает команду и завершает работу. Если вы хотите запустить интерактивный скрипт (например, клиент sql), вам нужно сказать ему выделить tty с -t см. 3.8.3.12 -t and -T: control pseudo-terminal allocation. Вы избежите сохранения скрипта на сервере, а также необходимости вызывать его после подключения.

вот что я использую для подключения к MySQL из пакета файл:

#mysql.bat start putty -t -load "sessionname" -l username -pw password -m c:\mysql.sh

#mysql.sh mysql -h localhost -u username --password="foo" mydb

https://superuser.com/questions/587629/putty-run-a-remote-command-after-login-keep-the-shell-running


Я хочу предложить общее решение для этих требований, возможно, это польза для вас: AutoIt. С помощью этой программы вы можете писать сценарии поверх любого окна, такого как Putty, и выполнять все команды, которые вы хотите (например, нажатие кнопки или щелчок мыши в текстовых полях или кнопках).

таким образом, вы можете эмулировать все шаги, которые вы всегда делаете с Putty.


ввод команды после входа в систему можно сделать, пройдя через раздел SSH в нижней части шпатлевки, и у вас должна быть опция удаленная команда (данные для отправки на сервер), разделяющая две команды ;


mputty можете сделать это, но это не всегда. (если этот период ожидания слишком медленный)

mputty использует замазку, и она расширяет замазку. Есть возможность запустить скрипт. Если это не работает, убедитесь, что период ожидания перед вводом является высоким значением или увеличить это значение. См. сеансы шпатлевки, затем имя сеанса, правую кнопку мыши, страницу свойств / сценария.


можно использовать -i privatekeyfilelocation в случае, если вы используете закрытый ключ вместо пароля.