Створіть пакетний файл або ярлик для PuTTY (ssh), який відкриває сеанс і виконує команду


10

Я часто виявляю відкриття сеансу SSH для запуску тієї самої однієї команди. У мене є все налаштування, щоб увійти, не вводячи пароль (через SSH Key-based Auth), тому я задумався, чи існує спосіб створення ярлика або пакетного файлу в Windows, який би завантажував PuTTY або подібну програму, а потім звільнити це команда (і, ймовірно, вихід, якщо результат хороший).

Відповіді:


14

Використовуйте версію PuTTY командної plink.exeлінії, щоб ініціювати SSH-з'єднання з хостом на вибір. Використовуйте -sshперемикач для з'єднання з SSH. За допомогою -mкомутатора ви можете включити командний файл:

plink.exe -ssh host1 -m C:\path\to\commands.txt

Ви можете завантажити plink.exeз тут.

Останнім кроком буде створення ярлика, включаючи plink.exeбажані параметри.

Перегляньте документацію на Plink щодо інших різних параметрів: документації на Plink.exe


1
Не потрібно використовувати -mперемикач з Plink, оскільки це дозволяє вказувати команду безпосередньо у своєму командному рядку, дивіться мою відповідь .
Мартін Прикрил

Я вибираю цю відповідь, як вважаю за краще використовувати, -ssh host1що стосується шпаклівки профілю протиuser@host
FreeSoftwareServers

@FreeSoftwareServers У цьому відношенні PuTTY немає різниці. Ви можете зробити plink site commandтак само, як і з PuTTY (крім command). У Plink і PuTTY в основному однаковий набір параметрів командного рядка.
Мартін Прикрил

8

Для автоматизації виконання команди використовуйте Plink (з пакету PuTTY) , а не сам PuTTY.

Plink приймає команду у своєму командному рядку:

plink.exe user@host command

Якщо ви хочете продовжувати використовувати PuTTY, ви можете використовувати -mперемикач, щоб вказати командний файл (Plink також підтримує -mкомутатор).


Коли я сказав, що я не маю пароля, я повинен був уточнити, що я маю на увазі під Auth на основі SSH Key, але я подумав, що це буде припускати. Я не думаю, що це спрацює так, як є, йому знадобляться параметри на зразок -i keyабо-pw password
FreeSoftwareServers

@FreeSoftwareServers У цьому відношенні PuTTY немає різниці. Ви можете зробити plink site commandтак само, як і з PuTTY (крім command). У Plink і PuTTY в основному однаковий набір параметрів командного рядка.
Мартін Прикрил

у Вашій відповіді не було включено варіантів використання SSH-ключа, заснованого на Auth aka PWDless, хоча правильні прапори існують, я знайшов їх у підручних сторінках для виправлення, які були включені у відповідь MrPowerUsers, я розумію, що обидва могли працювати, але користувачі MrPower відповідають, що відповідають моїм питання краще, а також пов’язані сторінки чоловіка
FreeSoftwareServers

6

Для цього можна використовувати конфігурації шпаклівки.

Завантажте шпаклівку та налаштуйте сеанс.

Введіть віддалену команду, яку ви хочете запустити тут:

Шпаклівка віддаленого командного поля

Потім, перш ніж натиснути кнопку " Відкрити ", поверніться до вкладки " Сесія " (вгорі) та збережіть конфігурацію.

Тепер створіть ярлик до putty.exe, додавши -loadпрапор, наприклад:

%PATH_TO_PUTTY%\putty.exe -load my_config

Тепер ви можете просто натиснути ярлик, і він завантажить ваш сеанс, виконуючи вашу команду.


Виглядає завтра чудовим, поганим тестом, я вважаю, що я просто виконаю сценарій, і він може закінчити сеанс за результатами сценарію
FreeSoftwareServers

Так, сеанс закінчиться, коли команда припиняється. Якщо ви хочете, щоб PuTTY зациклювався після завершення роботи (наприклад: перевірити вихід), тоді на вкладці " Сеанс " встановіть " Закрити вікно при виході " .
Attie

2

Якщо ви використовуєте Windows 10, вам може бути цікаво знати, що Microsoft, як повідомляється, має бета-версію OpenSSH (клієнт і сервер ):

[…] Перейдіть до пункту "Керування додатковими функціями", потім + "Додати функцію". Потім можна прокрутити список вниз і знайти функції WindowsSSH Client (Beta) та OpenSSH Server (Beta) у Windows. Ідея запустити інший віддалений сервіс у Windows може бути химерною, тому ми не звинувачуємо вас, якщо ви не хочете встановлювати сервер.

Після встановлення ви можете просто запустити свій командний рядок і використовувати клієнт OpenSSH, набравши ssh, а потім команду типу ssh ubuntu@someIP.

Ось поточний (станом на 28 листопада 2017 року) sshпосібник із використання команд, який ми отримуємо з клієнтом Windows OpenSSH:

C:\WINDOWS\system32>ssh
usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
           [-D [bind_address:]port] [-E log_file] [-e escape_char]
           [-F configfile] [-I pkcs11] [-i identity_file]
           [-J [user@]host[:port]] [-L address] [-l login_name] [-m mac_spec]
           [-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address]
           [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]]
           [user@]hostname [command]
C:\WINDOWS\system32>

Якщо це працює, ви можете мати можливість користуватися так, sshяк ви хочете на * Nix:

C:\WINDOWS\system32>ssh user@host "ls -l ~"

Thats дійсно класно знати, але я люблю SuperPuTTY. Я також буду стежити за Windows OpenSSH.
FreeSoftwareServers

Чи потрібно мати клієнта ssh на машині, до якої ви віддаляєтесь?
Запитую,

1
@ Nelda.techspiress Ви повинні тільки сервер , що працює на машинах , які ви увійти в і потрібно тільки клієнт на машинах при вході в систему с. (Відповідно, якщо ви ввійдете в одну машину як проксі, щоб перейти на іншу, то середній машині знадобиться і те й інше.)
Майкл - Де Clay

2

Я просто подумав, що я вставлю сценарій, який я створив, щоб, сподіваючись, врятувати деяким людям години синтаксису та вивчення сторінок людини

a) Файл SingleIP, діапазон IP або IPList

b) ім'я сценарію для запуску в IP / діапазоні (фактичний сценарій Unix sh / ksh)

в) необов'язково сканувати nmap для відкритого порту 22 (тобто підмережі з деякими машинами, що не є Linux)

-як уникати IP-шпаклівки, не можна підключитися, уникаючи можливості продовження сценарію належним чином

d) необов'язково запустити команду pscp для автоматичного кешування хост-ключа (putty не робить цього автоматично)

Ця партія передбачає:

1. у вас встановлений повний пакет PuTTY і ключ SSH в C: \ Program Files \ PuTTY \

2. пакетні / скрипти / файли IPlist, встановлені в C: \ Program Files \ PuTTY \ scriptpts \

3. Робочі каталоги NMAP та PuTTY знаходяться у вашому командному шляху

https://www.harmonyhit.com/PuttyBatch.bat

Це в основному корисно для наявності одного сценарію (наприклад, оновлення сертифіката SSL) на різних машинах

Ось повний пакетний файл:

@ECHO OFF

rem Ви повинні змінити розділ CACHEKEY і SCRIPT, щоб відобразити ваше місцезнаходження SSH-ключа

встановити IPFILE = IPList_temp.txt
встановити збиток = n
встановити OPTION = 1
встановити RANGE =
встановити IP =
встановити SCAN = n
встановити KEYCACHE = n

: ВАРІАНТ
CLS
ECHO (Робочий каталог встановлено на C: \ Program Files \ PuTTY \ script) \)
ECHO. 
ECHO 1. Єдиний IP
ECHO 2. Файл списку IP
ECHO 3. Діапазон IP
ECHO.
set / p OPTION = "Виберіть тип IP:"
ЯКЩО ВАРІАНТ% == 3 GOTO IPRANGE
ЯКЩО ВАРІАНТ% == 2 GOTO IPLIST
ЯКЩО ВАРІАНТ% == 1 GOTO SINGLEIP
echo Будь ласка, виберіть дійсну опцію
ГОТО ОПЦІЯ

: IPRANGE
ECHO Введіть діапазон IP-адрес, як у наступному прикладі. Використовуйте пробіл між кількома діапазонами:
ECHO, тобто "10.21.0.15-99 10.21.1.15-100"
set / p RANGE = Введіть діапазон: 
echo% RANGE%>% IPFILE%
GOTO SCRIPTNAME

: SINGLEIP
set / p IP = Введіть IP:
echo% IP%>% IPFILE%
GOTO SCRIPTNAME

: IPLIST
set / p IP = Введіть ім'я файлу IPList:
копія / Y% IP%% IPFILE%
GOTO SCRIPTNAME

: SCRIPTNAME
set / p SCRIPT = Введіть назву сценарію:
якщо не існує% SCRIPT% (
назва файлу echo не існує!
GOTO SCRIPTNAME)

ECHO.
set / p SCAN = Чи слід сканувати Nmap спочатку? (рекомендується):
якщо% SCAN% == n GOTO: RUNCACHE

rem Перевірте, чи тип IP "діапазон", оскільки nmap не може прочитати діапазон IP-файлів з файлу, а потрібно вводити безпосередньо команду nmap
ЯКЩО ВАРІАНТ% == 3 GOTO NMAPRANGE 
: NMAP
ехо Сканування IP-адрес для порту 22 відкрито ...
nmap --open -n -p22 -iL% IPFILE% -oG - | findstr / E вгору> nmap_temp.txt
ГОТО ПІСЛЯ МАРТУ

: NMAPRANGE
ехо Сканування IP-адрес для порту 22 відкрито ...
nmap --open -n -p22% RANGE% -oG - | findstr / E вгору> nmap_temp.txt

: ПІСЛЯ КАРТИ
відлуння зроблено
Форматування rem nmap невірне, далі видаляється додаткова інформація
для / f "tokens = 2" %% A в (nmap_temp.txt) робити відлуння %% A >> nmap_temp2.txt
rem видалити прихований простір наприкінці IP (потрібно, щоб "repl" знаходився в каталозі пакетного файлу)
введіть "nmap_temp2.txt" | repl "" "">% IPFILE%

: RUNCACHE
set / p KEYCACHE = Сканування та кешування SSH клавіші (в / п)?
якщо% KEYCACHE% == n GOTO SCRIPT

: CACHEKEY
rem Запустіть усі IP-адреси, щоб кешувати ключ хоста SSH, якщо він ще не кешований
for / F "tokens = *" %% A in (% IPFILE%) do (echo y | "C: \ Program Files \ PuTTY \ pscp.exe" -l root -i "C: \ Program Files \ PuTTY \ SSH .ppk "-натисніть %% A: / tmp / test)

: SCRIPT
for / F "tokens = 1" %% A in (% IPFILE%) do ("C: \ Програмні файли \ PuTTY \ putty.exe" -ssh %% A -t -l root -i "C: \ Program Files \ PuTTY \ SSH.ppk "-m" C: \ програмні файли \ PuTTY \ скрипти \% SCRIPT% ")
якщо існує nmap_temp.txt (del nmap_temp.txt)
якщо існує nmap_temp2.txt (del nmap_temp2.txt)
set / p runagain = "Натисніть Enter, щоб закінчити, або y, щоб повторно"
якщо% runagain% == y GOTO OPTION

1
Відповіді лише на посилання нахмурюються, що робити, якщо ваш веб-сайт знижується? Якщо ви хочете зробити свій внесок, будь ласка, поділіться тут сценарієм. Запрошуємо розмістити джерело / посилання на сайт разом з кодом тут, але відповіді повинні бути самостійними та не вимагати наступних посилань.
FreeSoftwareServers

1
вміст партії
Тодд Портер

Не "кешуйте" ключовим хостом. Перевірка хост-ключа - невід'ємна частина захисту вашого сеансу SSH. PuTTY (та його інструменти) не вимагають від вас хост-ключа для розваги чи для того, щоб вас переслідувати. У нього є причина! + Ви також не повинні зберігати дані користувачів ( SSH.ppkі ) to папку програмних файлів сценарію .
Martin

Ви можете порекомендувати, як запустити скрипт через кілька IP-адрес без нього? a) це не призначено для типового робочого столу користувача, більше для сервера адміністратора, де безпека більше, хто має доступ до сервера; б) який саме ризик безпеки? Кешування хост-ключа не є обов'язковим і його слід виконувати лише один раз у межах діапазону. Якщо ви знову запустите скрипт, не кешуючи ключ, ви все одно побачите і змінити ключовий ключ, і сценарій не буде продовжуватись далі ...
Todd Porter

...... За згодою на ключ ти. Я вказую на загальну папку в нашій NAS, де живе спільна папка, до якої лише я маю доступ. Я щойно вибрав шлях, оскільки інші користувачі будуть іншими
Тодд Портер,

1

Ви також можете переглянути програмне забезпечення, таке як mRemoteNG, MOBAxTerm або SecureCRT, яке керуватиме вашими SSH-з'єднаннями, це також пов'язує із збереженими сеансами PuTTY, щоб ви могли застосувати шаблон до сеансу.


0

Це остаточний "CMD", який я можу просто зберегти на своєму FileServer і створити ярлик на своєму робочому столі.

::FreeSoftwareServers
::Automated Opening of SSH Tunnel & Execute CMD on Remote Host
::/superuser/1278434/create-a-batch-file-or-shortcut-to-putty-ssh-that-opens-a-session-and-runs-a-c

set puttydir="C:\Program Files\PuTTY"
set exe=plink.exe
::Profile must exist in PuTTY
set remotehost=FileServer
set remotecmd="chmod 777 /mnt/mdadm/torrents -R"

cd %puttydir% 

%exe% %remotehost% %remotecmd%

::Test First Manually in CMD Prompt
::Note Remote Host does NOT have access to BashRC Alias's
::start "C:\Program Files\PuTTY\" plink.exe -ssh FileServer touch /tmp/testfile
::start "C:\Program Files\PuTTY\" plink.exe -ssh FileServer ~/script.sh
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.