it-roy-ru.com

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

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

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

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

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

PuTTY -load "Host" -l username -pw password

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

#!/bin/bash

add Oracle10g
sqlplus username password

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

Вот общая команда, которую я пытаюсь запустить из командной строки:

PuTTY -load "Host" -l username -pw password -m c:\test.sh
10
raphnguyen

Разобрался с помощью друга. Параметр -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 и регистрирует меня в Host.
  2. Запустите команду tcsh sql. Это добавляет инструмент Oracle к моему хосту и регистрирует меня в базе данных sql.
8
raphnguyen

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

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

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

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

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

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

Свойства папки Windows имеют очень чистый и урезанный вид - она ​​функционирует как небольшая консоль с ярлыками для каждого из моих частых удаленных подключений PuTTY и 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, он загружает скрипт -m, если вы редактируете скрипт, вам нужно перезапустить PuTTY вместо простого перезапуска сеанса. 

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

Из основного сеанса PuTTY (не «редактировать настройки» из существующего сеанса) загрузите сохраненную конфигурацию и на вкладке 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 "\033]0;Proxy Session @master01\$\007"'
    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 
6
arp

Когда вы используете опцию -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

2
Jonathan

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

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

0
Desty

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

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

0
Aftershock

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

0
not tellin