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

10

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

FreeSoftwareServers
источник

Ответы:

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

Smeerpijp
источник
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, вы можете использовать -mswitch для указания командного файла (Plink также поддерживает -mswitch).

Мартин Прикрыл
источник
Когда я сказал, что у меня нет пароля, я должен был указать, что имел в виду аутентификацию на основе ключей SSH, но я подумал, что это предположительно. Я не думаю, что это будет работать так, как есть, для этого потребуются параметры, добавленные как -i keyили-pw password
FreeSoftwareServers
@FreeSoftwareServers В этом отношении для PuTTY нет никакой разницы. Вы можете сделать так plink site commandже, как с PuTTY (за исключением command). Plink и PuTTY имеют в основном одинаковый набор параметров командной строки.
Мартин Прикрыл
Ваш ответ не включал варианты использования SSH Key Based Auth или PWDless, хотя правильные флаги существуют, я нашел их на страницах man для plink, которые были включены в ответ MrPowerUsers, я понимаю, что оба могут работать, но ответы пользователей MrPower соответствуют моему лучше
задавайте
6

Вы можете использовать конфигурации замазки для достижения этой цели.

Загрузите замазку и настройте сеанс.

Введите удаленную команду, которую вы хотите запустить здесь:

Putty удаленный командный блок

Затем, прежде чем нажать « Открыть », вернитесь на вкладку « Сеанс » (вверху) и сохраните свою конфигурацию.

Теперь создайте ярлык для putty.exe, добавив -loadфлаг, например:

%PATH_TO_PUTTY%\putty.exe -load my_config

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

Attie
источник
Завтра выглядит потрясающе, плохой тест, полагаю, я просто выполню сценарий, и он может завершить сеанс на основе результатов сценария
FreeSoftwareServers
Да, сессия закончится, когда команда завершится. Если вы хотите, чтобы PuTTY как-то зависал (например, для проверки выходных данных), установите « Закрыть окно при выходе » на вкладке « Сеанс ».
Атти
2

Если вы используете Windows 10, вам может быть интересно узнать, что Microsoft по сообщениям имеет бета-версию OpenSSH (клиент и сервер ):

[…] Перейдите в «Управление дополнительными функциями», затем + «Добавить функцию». Затем вы можете прокрутить список вниз и найти функции OpenSSH Client (Beta) и OpenSSH Server (Beta) в Windows. Идея запуска другой удаленной службы в Windows может быть пугающей, поэтому мы не будем винить вас, если вы не хотите устанавливать сервер.

После установки вы можете просто запустить свою командную строку и использовать клиент OpenSSH, набрав ssh, а затем команду, например ssh ubuntu@someIP.

Вот текущее (по состоянию на 28 ноября 2017 г.) sshруководство по использованию команд, которое мы получаем вместе с Windows OpenSSH Client:

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 ~"
Майкл - Где Клэй Ширки
источник
Это действительно круто, но я люблю SuperPuTTY. Я также буду следить за Windows OpenSSH.
FreeSoftwareServers
Вам нужен ssh-клиент на машине, на которую вы собираетесь удаленно работать? Я спрашиваю, потому что некоторые машины, на которых я удален, не являются Windows 10.
Nelda.techspiress
1
@ Nelda.techspiress Вы должны только сервер , работающий на машинах , которые вы войти в и нужно только клиент на машинах при входе в систему с. (Соответственно, если вы войдете на одну машину в качестве прокси-сервера, чтобы подключиться к другой, эта средняя машина будет нуждаться в обеих.)
Майкл - Где Клэй Ширки
2

Просто подумал, что вставлю сделанный мной скрипт, чтобы, надеюсь, сэкономить несколько часов на синтаксисе и изучении страниц руководства.

a) файл SingleIP, IP Range или IPList

б) имя скрипта для запуска по IP / диапазону (фактический скрипт типа unix sh / ksh)

c) при желании можно выполнить сканирование nmap для открытия порта 22 (т. е. подсети с некоторыми машинами, отличными от Linux)

-чтобы избежать IP-адресов, к которым не может подключиться замазка, избегая возможности продолжения работы скрипта

d) при желании запустите команду pscp, чтобы автоматически кэшировать ключ хоста (putty не делает этого автоматически)

Эта партия предполагает:

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

2. пакетные / scripts / IPlist файлы, установленные в C: \ Program Files \ PuTTY \ scripts \

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

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

Это в основном полезно для использования одного сценария (например, обновления SSL-сертификата) на нескольких компьютерах

Вот полный пакетный файл:

@ECHO OFF

rem Вы должны изменить раздел CACHEKEY и SCRIPT, чтобы отразить местоположение вашего ключа SSH

set IPFILE = IPList_temp.txt
установить runagain = n
установите OPTION = 1
установить RANGE =
установить IP =
установить SCAN = n
установите KEYCACHE = n

: ВАРИАНТ
ЦБС
ECHO (Рабочий каталог установлен в C: \ Program Files \ PuTTY \ scripts \)
ECHO. 
ЭХО 1. Одиночный IP
ECHO 2. Файл списка IP
ECHO 3. IP Range
ECHO.
set / p OPTION = "Выберите тип IP:"
IF% OPTION% == 3 GOTO IPRANGE
IF% OPTION% == 2 GOTO IPLIST
IF% OPTION% == 1 GOTO SINGLEIP
эхо Пожалуйста, выберите правильный вариант
GOTO ВАРИАНТ

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

: SINGLEIP
set / p IP = Введите IP:
эхо% IP%>% IPFILE%
GOTO SCRIPTNAME

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

: SCRIPTNAME
set / p SCRIPT = Введите имя скрипта:
если не существует% SCRIPT% (
эхо имя файла не существует!
GOTO SCRIPTNAME)

ECHO.
set / p SCAN = Сначала Nmap сканирует? (рекомендуемые):
если% SCAN% == n GOTO: RUNCACHE

rem Проверьте, является ли тип IP «диапазон», так как nmap не может прочитать диапазон IP из файла и должен быть введен непосредственно в команде nmap
IF% OPTION% == 3 GOTO NMAPRANGE 
: NMAP
echo Сканирование IP-адресов для порта 22 открыть ...
nmap --open -n -p22 -iL% IPFILE% -oG - | findstr / E Up> nmap_temp.txt
GOTO AFTERNMAP

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

: AFTERNMAP
эхо сделано
неверное форматирование rem nmap, следующее удаляет лишнюю информацию
for / 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 в (% IPFILE%) делать (echo y | "C: \ Program Files \ PuTTY \ pscp.exe" -l root -i "C: \ Program Files \ PuTTY \ SSH .ppk "-touch %% A: / tmp / test)

: SCRIPT
для / F "токены = 1" %% A в (% IPFILE%) do ("C: \ Program Files \ PuTTY \ putty.exe" -ssh %% A -t -l root -i "C: \ Program Files \ PuTTY \ SSH.ppk "-m" C: \ Program Files \ PuTTY \ scripts \% 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 папку Program Files`.
Martin Prikryl
Можете ли вы порекомендовать, как запустить скрипт на нескольких IP без него? а) это не предназначено для типичного рабочего стола пользователя, больше для сервера администратора, где безопасность выше, у кого есть доступ к серверу б) что именно представляет риск безопасности? Кэширование ключа хоста не является обязательным и должно выполняться только один раз по всему диапазону. Если вы снова запустите сценарий без кеширования ключа, вы все равно увидите и разместите изменения ключа, и сценарий не будет продолжаться ...
Тодд Портер
...... В согласии на ключ ты. Я указываю на общую папку на нашем NAS, где находится общая папка, доступ к которой есть только у меня. Я просто выбрал путь, так как другие пользователи будут другими
Тодд Портер
1

Вы также можете посмотреть на программное обеспечение, такое как mRemoteNG, MOBAxTerm или SecureCRT, которое будет управлять вашими SSH-соединениями для вас, это также связано с сохраненными сессиями PuTTY, чтобы вы могли применить шаблон к сессию.

Gubbins
источник
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
FreeSoftwareServers
источник