Crie um arquivo em lotes ou atalho para PuTTY (ssh) que abre uma sessão e executa um comando

10

Muitas vezes me vejo abrindo uma sessão SSH para executar o mesmo comando único. Eu tenho tudo configurado para fazer login sem digitar uma senha (via autenticação baseada em chave SSH), então me perguntei se havia uma maneira de criar um atalho ou um arquivo em lotes no Windows que carregasse o PuTTY ou um programa semelhante e, em seguida, disparasse esse comando (e saída provável se o resultado for bom).

FreeSoftwareServers
fonte

Respostas:

14

Use a versão PuTTY da linha de comando plink.exepara iniciar uma conexão SSH com um host de sua escolha. Use o -sshswitch para conectar-se ao SSH. Com a -mopção, você pode incluir um arquivo de comando:

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

Você pode baixar plink.exea partir de aqui.

O último passo seria criar um atalho, incluindo plink.exeos parâmetros desejados.

Confira a documentação do Plink para outros parâmetros: Documentação do Plink.exe

Smeerpijp
fonte
11
Não há necessidade de usar o -mswitch com o Plink, pois ele permite especificar o comando diretamente em sua linha de comando, veja minha resposta .
Martin Prikryl
Eu estou escolhendo esta resposta como eu prefiro usar -ssh host1que se relaciona com massa de vidraceiro Perfil vsuser@host
FreeSoftwareServers
@FreeSoftwareServers Não há diferença para o PuTTY a esse respeito. Você pode fazer plink site commandda mesma maneira que com o PuTTY (exceto command). Plink e PuTTY têm basicamente o mesmo conjunto de opções de linha de comando.
Martin Prikryl
8

Para automatizar uma execução de comando, use o Plink (do pacote PuTTY) , não o próprio PuTTY.

O Plink aceita um comando em sua linha de comando:

plink.exe user@host command

Se você quiser continuar usando o PuTTY, poderá usar o -mswitch para especificar um arquivo de comando (o Plink também suporta o -mswitch).

Martin Prikryl
fonte
Quando eu disse que não tinha senha, deveria ter especificado o que queria dizer com autenticação baseada em chave SSH, mas achei que seria assumido. Eu não acho que isso iria funcionar como é, ele precisaria de parâmetros adicionados em como -i keyou-pw password
FreeSoftwareServers
@FreeSoftwareServers Não há diferença para o PuTTY a esse respeito. Você pode fazer plink site commandda mesma maneira que com o PuTTY (exceto command). Plink e PuTTY têm basicamente o mesmo conjunto de opções de linha de comando.
Martin Prikryl
sua resposta não incluiu as opções para usar o autenticação baseada em chave SSH, também conhecida como login PWDless, embora existam os sinalizadores corretos, eu os encontrei nas páginas de manual do plink, incluídas na resposta MrPowerUsers, entendo que ambas poderiam funcionar, mas os usuários MrPower respondem de acordo com o meu pergunta melhor e vinculou as páginas de manual também
FreeSoftwareServers
6

Você pode usar configurações de massa para conseguir isso.

Carregue massa e configure sua sessão.

Digite o comando remoto que você deseja executar aqui:

Caixa de comando remoto Putty

Antes de clicar em " Abrir ", volte para a guia " Sessão " (na parte superior) e salve sua configuração.

Agora, crie um atalho para putty.exe, adicionando o -loadsinalizador, por exemplo:

%PATH_TO_PUTTY%\putty.exe -load my_config

Agora, basta clicar no atalho e ele carregará sua sessão, executando seu comando.

Attie
fonte
Parece incrível, mal teste amanhã, acho que só vai executar um script e pode terminar a sessão com base em resultados de roteiro
FreeSoftwareServers
Sim, a sessão terminará quando o comando terminar. Se você quiser que o PuTTY fique por aqui uma vez feito (por exemplo: para inspecionar a saída), defina " Fechar janela na saída " na guia " Sessão ".
quer
2

Se você estiver usando o Windows 10, você pode estar interessado em saber que a Microsoft alegadamente tem um beta de OpenSSH (cliente e servidor ):

[…] Vá para “Gerenciar recursos opcionais” e depois “Adicionar um recurso”. Você pode rolar a lista e encontrar os recursos OpenSSH Client (Beta) e OpenSSH Server (Beta) no Windows. A ideia de executar outro serviço remoto no Windows pode ser assustadora, por isso não o culpo se você não quiser instalar o servidor.

Uma vez instalado, você pode simplesmente iniciar sua linha de comando e usar o cliente OpenSSH digitando ssh seguido pelo comando como ssh ubuntu@someIP.

Aqui está o sshguia de uso do comando atual (em 28 de novembro de 2017) que estamos recebendo com o 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>

Se isso funcionar, você poderá usar sshcomo faria em um * Nix:

C:\WINDOWS\system32>ssh user@host "ls -l ~"
Michael - onde está Clay Shirky
fonte
É muito legal saber, mas eu amo o SuperPuTTY. Vou ficar de olho no Windows OpenSSH também.
FreeSoftwareServers
Você precisa ter o cliente ssh na máquina na qual está remotando? Eu pergunto porque algumas das máquinas remotas não são o Windows 10.
Nelda.techspiress
11
@ Nelda.techspiress Você só deve precisar o servidor rodando em máquinas que você faça o login para e só precisa do cliente em máquinas que você faça o login a partir. (Do mesmo modo, se você entrar em uma máquina como um proxy para hop em um outro, que a máquina meio vai precisar de ambos.)
Michael - Onde está Clay Shirky
2

Pensei em inserir o script que fiz para, esperançosamente, salvar algumas pessoas de horas de pesquisa de sintaxe e de página de manual

a) Arquivo SingleIP, IP Range ou IPList

b) nome do script a ser executado no IP / intervalo (script do tipo sh / ksh unix real)

c) opcionalmente, faça a varredura do nmap para a porta 22 aberta (ou seja, sub-rede com algumas máquinas não Linux)

-Quer evitar IPs que a massa não possa se conectar, evitando que o script possa continuar corretamente

d) opcionalmente, execute o comando pscp para autocache a chave do host (a massa de vidraceiro não faz isso automaticamente)

Este lote assume:

1. você tem o pacote PuTTY completo e a chave SSH instalados em C: \ Arquivos de Programas \ PuTTY \

2. arquivos em lote / scripts / lista de IPs instalados em C: \ Arquivos de Programas \ PuTTY \ scripts \

3. Os diretórios de trabalho NMAP e PuTTY estão no seu caminho de comando

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

Isso é útil principalmente para ter um único script (como atualizar um certificado SSL) em uma variedade de máquinas

Aqui está o arquivo em lotes completo:

@ECHO OFF

rem Você deve modificar a seção CACHEKEY and SCRIPT para refletir o local da chave SSH

defina IPFILE = IPList_temp.txt
definir runagain = n
definir OPÇÃO = 1
definir RANGE =
definir IP =
definir SCAN = n
definir KEYCACHE = n

:OPÇÃO
CLS
ECHO (o diretório de trabalho está definido como C: \ Arquivos de Programas \ PuTTY \ scripts \)
ECO. 
ECHO 1. IP único
ECHO 2. Arquivo da lista de IPs
ECHO 3. Faixa de IP
ECO.
set / p OPTION = "Escolha o tipo de IP:"
SE% OPTION% == 3 GOTO IPRANGE
SE% OPTION% == 2 GOTO IPLIST
SE% OPTION% == 1 GOTO SINGLEIP
eco Selecione uma opção válida
OPÇÃO GOTO

:INTERVALO DE IP
ECHO Insira o (s) intervalo (s) IP (s) como no exemplo a seguir. Use um espaço entre vários intervalos:
ECHO, ou seja, "10.21.0.15-99 10.21.1.15-100"
set / p RANGE = Insira o intervalo: 
eco% RANGE%>% IPFILE%
GOTO SCRIPTNAME

: SINGLEIP
set / p IP = Digite o IP:
eco% IP%>% IPFILE%
GOTO SCRIPTNAME

: IPLIST
set / p IP = Digite o nome do arquivo IPList:
cópia / Y% IP%% IPFILE%
GOTO SCRIPTNAME

: SCRIPTNAME
set / p SCRIPT = Digite o nome do script:
se não existir% SCRIPT% (
nome do arquivo eco não existe!
GOTO SCRIPTNAME)

ECO.
set / p SCAN = O Nmap verifica primeiro? (recomendado):
se% SCAN% == n GOTO: RUNCACHE

rem Verifique se o tipo de IP é "range", pois o nmap não pode ler um range de IP do arquivo e deve ser digitado diretamente no comando nmap
SE% OPTION% == 3 GOTO NMAPRANGE 
: NMAP
eco IPs de varredura para a porta 22 aberta ...
nmap --open -n -p22 -iL% IPFILE% -oG - | findstr / E Up> nmap_temp.txt
GOTO AFTERNMAP

: NMAPRANGE
eco IPs de varredura para a porta 22 aberta ...
nmap --open -n -p22% RANGE% -oG - | findstr / E Up> nmap_temp.txt

: AFTERNMAP
eco FEITO
Como a formatação rem nmap não está correta, o seguinte remove informações adicionais
para / f "tokens = 2" %% A em (nmap_temp.txt) faz eco de %% A >> nmap_temp2.txt
rem remove o espaço oculto no final do IP (requer que "repl" esteja no diretório de arquivos em lotes)
digite "nmap_temp2.txt" | repl "" "">% IPFILE%

: RUNCACHE
set / p KEYCACHE = Verificar e armazenar em cache a chave SSH (s / n)?
se% KEYCACHE% == n GOTO SCRIPT

: CACHEKEY
rem Execute todos os IPs para armazenar em cache a chave do host SSH, se ainda não estiver em cache
para / F "tokens = *" %% A em (% IPFILE%) do (eco | | C: \ Arquivos de Programas \ PuTTY \ pscp.exe "-l root -i" C: \ Arquivos de Programas \ PuTTY \ SSH .ppk "-touch %% A: / tmp / test)

:ROTEIRO
para / F "tokens = 1" %% A em (% IPFILE%) do ("C: \ Arquivos de Programas \ PuTTY \ putty.exe" -ssh %% A -t -l root -i "C: \ Arquivos de Programas \ PuTTY \ SSH.ppk "-m" C: \ Arquivos de Programas \ PuTTY \ scripts \% SCRIPT% ")
se existir nmap_temp.txt (del nmap_temp.txt)
se existir nmap_temp2.txt (del nmap_temp2.txt)
set / p runagain = "Pressione Enter para concluir ou y para executar novamente"
se% runagain% == y GOTO OPTION
Todd Porter
fonte
11
As respostas apenas para links são desaprovadas, e se o site for desativado? Se você quiser contribuir, compartilhe o script aqui. Você pode postar uma fonte / link no site junto com o código aqui, mas as respostas devem ser independentes e não exigir os links a seguir.
FreeSoftwareServers
11
conteúdo do lote colado
Todd Porter
Não "autocache" uma chave de host. A verificação da chave do host é parte integrante da proteção da sua sessão SSH. O PuTTY (e suas ferramentas) não solicita a chave do host por diversão ou assédio. Tem uma razão! + Você também não deve armazenar dados do usuário ( SSH.ppke a ) to pasta Arquivos de programas do script .
Martin Prikryl
você pode recomendar como executar um script em vários IPs sem ele? a) isso não se destina a uma área de trabalho típica do usuário, mais a um servidor administrativo em que a segurança é maior com quem tem acesso ao servidor b) qual é exatamente o risco à segurança? O armazenamento em cache da chave do host é opcional e deve ser feito apenas uma vez no intervalo. Se você executar o script novamente sem cache a chave que você ainda vai ver e chave de host mudanças e o script não continuará ...
Todd Porter
...... De acordo com a chave tu. Aponto para uma pasta compartilhada em nosso NAS, onde reside a pasta compartilhada, à qual somente eu tenho acesso. Eu só peguei um caminho uma vez que outros usuários será diferente
Todd Porter
1

Você também pode procurar softwares como mRemoteNG, MOBAxTerm ou SecureCRT, que gerenciarão suas conexões SSH para você. Isso também se vincula às sessões PuTTY salvas, para que você possa aplicar um modelo à sessão.

Gubbins
fonte
0

Este é o "CMD" final que eu posso salvar no meu FileServer e criar um atalho na minha área de trabalho.

::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
fonte