Créer un fichier de commandes ou un raccourci vers PuTTY (ssh) qui ouvre une session et exécute une commande

10

Je me retrouve souvent à ouvrir une session SSH pour exécuter la même commande unique. J'ai tout configuré pour me connecter sans entrer de mot de passe (via l'authentification par clé SSH), donc je me suis demandé s'il y avait un moyen de créer un raccourci ou un fichier de commandes dans Windows qui chargerait PuTTY ou un programme similaire, puis déclencher (et probablement quitter si le résultat est bon).

FreeSoftwareServers
la source

Réponses:

14

Utilisez la version PuTTY en ligne de commande plink.exepour établir une connexion SSH avec un hôte de votre choix. Utilisez le -sshcommutateur pour vous connecter à SSH. Avec le -mcommutateur, vous pouvez inclure un fichier de commandes:

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

Vous pouvez télécharger à plink.exepartir de là.

La dernière étape serait de créer un raccourci incluant plink.exeles paramètres souhaités.

Consultez la documentation Plink pour d'autres paramètres: documentation Plink.exe

Smeerpijp
la source
1
Pas besoin d'utiliser -mswitch avec Plink, car il permet de spécifier la commande directement sur sa ligne de commande, voir ma réponse .
Martin Prikryl
Je choisis cette réponse car je préfère utiliser -ssh host1ce qui concerne le profil de mastic vsuser@host
FreeSoftwareServers
@FreeSoftwareServers Il n'y a aucune différence avec PuTTY à cet égard. Vous pouvez faire plink site commandla même chose qu'avec PuTTY (sauf pour command). Plink et PuTTY ont essentiellement le même ensemble d'options de ligne de commande.
Martin Prikryl
8

Pour automatiser l'exécution d'une commande, utilisez Plink (du package PuTTY) , pas PuTTY lui-même.

Plink accepte une commande sur sa ligne de commande:

plink.exe user@host command

Si vous souhaitez continuer à utiliser PuTTY, vous pouvez utiliser -mswitch pour spécifier un fichier de commandes (Plink prend également en charge le -mswitch).

Martin Prikryl
la source
Quand j'ai dit que je n'avais pas de mot de passe, j'aurais dû préciser que je voulais dire avec l'authentification basée sur une clé SSH, mais j'ai pensé que cela serait supposé. Je ne pense pas que cela fonctionnerait tel quel, il faudrait ajouter des paramètres comme -i keyou-pw password
FreeSoftwareServers
@FreeSoftwareServers Il n'y a aucune différence avec PuTTY à cet égard. Vous pouvez faire plink site commandla même chose qu'avec PuTTY (sauf pour command). Plink et PuTTY ont essentiellement le même ensemble d'options de ligne de commande.
Martin Prikryl
votre réponse n'incluait pas les options pour utiliser SSH Key Based Auth aka PWDless login, alors que les bons indicateurs existent, je les ai trouvés dans les pages de manuel pour plink qui étaient incluses dans MrPowerUsers answer, je comprends que les deux pourraient fonctionner mais les utilisateurs de MrPower répondent à ma question mieux et lié les pages de manuel ainsi
FreeSoftwareServers
6

Vous pouvez utiliser des configurations de mastic pour y parvenir.

Chargez du mastic et configurez votre session.

Entrez la commande à distance que vous souhaitez exécuter ici:

Boîte de commande à distance Putty

Ensuite, avant de cliquer sur " Ouvrir ", revenez à l' onglet " Session " (en haut), et enregistrez votre configuration.

Maintenant, créez un raccourci vers putty.exe, en ajoutant le -loaddrapeau, par exemple:

%PATH_TO_PUTTY%\putty.exe -load my_config

Maintenant, vous pouvez simplement cliquer sur le raccourci et il chargera votre session, exécutant votre commande.

Attie
la source
Ça a l'air
Oui, la session se terminera à la fin de la commande. Si vous souhaitez que PuTTY reste une fois terminé (par exemple: pour inspecter la sortie), définissez " Fermer la fenêtre à la sortie " dans l' onglet " Session ".
Attie
2

Si vous utilisez Windows 10, vous pourriez être intéressé de savoir que Microsoft aurait une version bêta d'OpenSSH (client et serveur ):

[…] Allez dans «Gérer les fonctionnalités optionnelles» puis + «Ajouter une fonctionnalité». Vous pouvez ensuite faire défiler la liste et trouver les fonctionnalités OpenSSH Client (Beta) et OpenSSH Server (Beta) dans Windows. L'idée d'exécuter un autre service distant sur Windows peut être intimidante, nous ne vous en voulons donc pas si vous ne souhaitez pas installer le serveur.

Une fois installé, vous pouvez simplement lancer votre ligne de commande et utiliser le client OpenSSH en tapant ssh suivi de la commande telle que ssh ubuntu@someIP.

Voici le sshguide d'utilisation des commandes actuel (au 28 novembre 2017) que nous obtenons avec le client 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>

Si cela fonctionne, vous devriez pouvoir l'utiliser sshcomme vous le feriez sur un * Nix:

C:\WINDOWS\system32>ssh user@host "ls -l ~"
Michael - Où est Clay Shirky
la source
C'est vraiment cool de savoir, mais j'adore SuperPuTTY. Je garderai également un œil sur Windows OpenSSH.
FreeSoftwareServers
Avez-vous besoin d'avoir le client ssh sur la machine vers laquelle vous vous connectez? Je demande parce que certaines des machines sur
lesquelles
1
@ Nelda.techspiress Vous devez seulement besoin du serveur fonctionnant sur des machines que vous vous connectez à et seulement besoin du client sur les machines que vous vous connectez à partir. (En conséquence, si vous vous connectez à une machine en tant que proxy pour sauter dans une autre, cette machine intermédiaire aura besoin des deux.)
Michael - Où est Clay Shirky
2

Je pensais juste insérer le script que j'avais créé pour, espérons-le, sauver des heures de recherche de syntaxe et de page de manuel

a) Fichier SingleIP, IP Range ou IPList

b) nom du script à exécuter sur l'IP / plage (script de type réel unix sh / ksh)

c) éventuellement faire une analyse nmap pour le port 22 ouvert (c'est-à-dire un sous-réseau avec certaines machines non Linux)

-veux éviter que le mastic IP ne puisse pas se connecter, évitant que le script puisse continuer correctement

d) éventuellement exécuter la commande pscp pour mettre en cache automatiquement la clé hôte (putty ne le fait pas automatiquement)

Ce lot suppose:

1. vous avez le package PuTTY complet et la clé SSH installés dans C: \ Program Files \ PuTTY \

2. Fichiers batch / scripts / IPlist installés dans C: \ Program Files \ PuTTY \ scripts \

3. Les répertoires de travail NMAP et PuTTY se trouvent dans votre chemin de commande

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

Ceci est surtout utile pour avoir un seul script (comme la mise à jour d'un certificat SSL) sur une gamme de machines

Voici le fichier batch complet:

@ÉCHO OFF

rem Vous devez modifier la section CACHEKEY et SCRIPT pour refléter l'emplacement de votre clé SSH

définir IPFILE = IPList_temp.txt
définir runagain = n
définir OPTION = 1
définir RANGE =
définir IP =
définir SCAN = n
définir KEYCACHE = n

:OPTION
CLS
ECHO (le répertoire de travail est défini sur C: \ Program Files \ PuTTY \ scripts \)
ÉCHO. 
ECHO 1. IP unique
ECHO 2. Fichier de liste IP
ECHO 3. Plage IP
ÉCHO.
set / p OPTION = "Choisissez le type IP:"
SI% OPTION% == 3 GOTO IPRANGE
SI% OPTION% == 2 GOTO IPLIST
SI% OPTION% == 1 GOTO SINGLEIP
echo Veuillez sélectionner une option valide
OPTION GOTO

:PLAGE IP
ECHO Saisissez la ou les plages IP comme dans l'exemple suivant. Utilisez un espace entre plusieurs plages:
ECHO, c'est-à-dire "10.21.0.15-99 10.21.1.15-100"
set / p RANGE = Entrez la plage: 
echo% RANGE%>% IPFILE%
GOTO SCRIPTNAME

: SINGLEIP
set / p IP = Entrez IP:
écho% IP%>% IPFILE%
GOTO SCRIPTNAME

: IPLIST
set / p IP = Entrez le nom de fichier IPList:
copie / Y% IP%% IPFILE%
GOTO SCRIPTNAME

: SCRIPTNAME
set / p SCRIPT = Entrez le nom du script:
s'il n'existe pas% SCRIPT% (
Le nom de fichier echo n'existe pas!
GOTO SCRIPTNAME)

ÉCHO.
set / p SCAN = Est-ce que Nmap scanne d'abord? (conseillé):
si% SCAN% == n GOTO: RUNCACHE

rem Vérifiez si le type IP est "plage" car nmap ne peut pas lire une plage IP à partir d'un fichier et doit être saisi directement dans la commande nmap
SI% OPTION% == 3 GOTO NMAPRANGE 
: NMAP
echo Scanning IPs for port 22 open ...
nmap --open -n -p22 -iL% IPFILE% -oG - | findstr / E Up> nmap_temp.txt
GOTO AFTERNMAP

: NMAPRANGE
echo Scanning IPs for port 22 open ...
nmap --open -n -p22% RANGE% -oG - | findstr / E Up> nmap_temp.txt

: AFTERNMAP
écho TERMINÉ
rem formatage nmap n'est pas correct, ce qui suit supprime les informations supplémentaires
pour / f "tokens = 2" %% A dans (nmap_temp.txt) faire écho %% A >> nmap_temp2.txt
rem supprimer l'espace caché à la fin de l'IP (nécessite que "repl" soit dans le répertoire des fichiers batch)
tapez "nmap_temp2.txt" | repl "" "">% IPFILE%

: RUNCACHE
set / p KEYCACHE = Scanner et mettre en cache la clé SSH (o / n)?
si% KEYCACHE% == n GOTO SCRIPT

: CACHEKEY
rem Exécutez toutes les adresses IP pour mettre en cache la clé d'hôte SSH si elle n'est pas déjà mise en cache
for / F "tokens = *" %% A in (% IPFILE%) do (echo y | "C: \ Program Files \ PuTTY \ pscp.exe" -l root -i "C: \ Program Files \ PuTTY \ SSH .ppk "-touch %% A: / tmp / test)

:SCÉNARIO
pour / F "tokens = 1" %% A dans (% 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% ")
s'il existe nmap_temp.txt (del nmap_temp.txt)
s'il existe nmap_temp2.txt (del nmap_temp2.txt)
set / p runagain = "Appuyez sur Entrée pour terminer ou sur y pour relancer"
si% runagain% == y OPTION GOTO
Todd Porter
la source
1
Les réponses de lien uniquement sont mal vues, et si votre site tombe en panne? Si vous souhaitez contribuer, veuillez partager le script ici. Nous vous invitons à publier une source / un lien vers le site avec le code ici, mais les réponses doivent être autonomes et ne pas nécessiter de liens suivants.
FreeSoftwareServers
1
contenu du lot collé
Todd Porter
Ne pas "mettre en cache" une clé d'hôte. La vérification de la clé d'hôte fait partie intégrante de la sécurisation de votre session SSH. PuTTY (et ses outils) ne vous demande pas la clé d'hôte pour vous amuser ou vous harceler. Ça a une raison! + Vous ne devez pas non plus stocker les données utilisateur ( SSH.ppket le ) to dossier du programme Program Files).
Martin Prikryl
pouvez-vous recommander comment exécuter un script sur plusieurs adresses IP sans lui? a) ce n'est pas destiné à un bureau d'utilisateur typique, plutôt à un serveur d'administration où la sécurité est plus qui a accès au serveur b) quel EST exactement le risque de sécurité? La mise en cache de la clé d'hôte est facultative et ne doit être effectuée qu'une seule fois sur la plage. Si vous exécutez à nouveau le script sans mettre en cache la clé, vous verrez et hébergerez les modifications de clé et le script ne continuera pas ...
Todd Porter
...... En accord sur la clé tu. Je pointe vers un dossier partagé sur notre NAS où réside le dossier partagé, auquel seul j'ai accès. Je viens de choisir un chemin car les autres utilisateurs seront différents
Todd Porter
1

Vous pouvez également consulter des logiciels tels que mRemoteNG, MOBAxTerm ou SecureCRT qui géreront vos connexions SSH pour vous, cela est également lié aux sessions PuTTY enregistrées afin que vous puissiez appliquer un modèle à la session.

Gubbins
la source
0

Ceci est le "CMD" final que je peux simplement enregistrer sur mon FileServer et créer un raccourci sur mon bureau.

::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
la source