GNU/Linux >> Tutoriels Linux >  >> Linux

10 exemples PuTTY PLINK pour automatiser les commandes Linux distantes à partir de fichiers batch Windows

Plink signifie PuTTY Link.

Plink est un utilitaire de ligne de commande compagnon pour PuTTY.

À un niveau très élevé :

  • Utilisez PuTTY pour une session SSH interactive de vos serveurs Windows vers Linux
  • Utilisez Plink pour une session SSH non interactive afin d'exécuter des commandes Linux à distance à des fins d'automatisation à partir de votre Windows


Dans ce didacticiel, nous aborderons les points suivants :

  1. Lancer plink à partir de l'invite de commande
  2. Session SSH interactive Plink
  3. Session SSH non interactive Plink pour exécuter une commande à distance
  4. Exécuter plusieurs commandes Linux à partir d'un fichier Windows
  5. Spécifier le protocole de connexion
  6. Spécifiez le mot de passe SSH comme argument Plink
  7. Déboguer les problèmes de Plink
  8. Spécifiez le port SSH comme option Plink
  9. Fichiers journaux Plink pour les connexions SSH
  10. Spécifiez le protocole SSH (SSH-1 ou SSH-2)
  11. Spécifiez le protocole IP (IPv4 ou IPv6)
  12. Utiliser le fichier de clé privée pour l'authentification avec Plink
  13. Options d'activation et de désactivation supplémentaires pour Plink SSH
  14. Empreinte digitale et HostKey avec Plink
  15. Option Plink -batch pour les fichiers batch Windows

Tout d'abord, téléchargez l'exécutable plink à partir d'ici.

Si PuTTY n'est pas déjà installé sur votre ordinateur, assurez-vous de télécharger également l'exécutable de mastic avec plink.

Si vous avez un ordinateur portable Windows 32 bits, assurez-vous de télécharger la version 32 bits de plink. Sinon, téléchargez la version 64 bits.

1. Lancer plink à partir de l'invite de commande

Vous ne pouvez pas simplement double-cliquer sur plink.exe pour le lancer. Puisqu'il s'agit d'un utilitaire de ligne de commande uniquement (sans interface graphique), vous devez d'abord lancer votre invite de commande Windows.

Pour cela, cliquez sur le menu Démarrer de Windows, et tapez "cmd.exe" dans la zone de recherche et appuyez sur Entrée, cela lancera l'invite de commande Windows.

De plus, selon l'endroit où vous avez téléchargé plink.exe, vous devrez peut-être modifier la variable PATH de Windows en conséquence.

Accédez à vos fenêtres "Propriétés système", cliquez sur "Variables d'environnement", sélectionnez Variable de chemin et ajoutez le répertoire où se trouve le plink.exe ici.

Ou, vous pouvez simplement définir votre variable PATH comme indiqué ci-dessous. Dans l'exemple suivant, j'ai téléchargé le plink.exe dans le répertoire C:\Downloads.

set PATH=%PATH%;C:\Downloads

Ensuite, tapez plink dans l'invite de commande, cela affichera les différentes options disponibles.

2. Session SSH interactive Plink

Voici la syntaxe de base pour plink :

plink [options] connection [command]

Dans la syntaxe ci-dessus :

  • options – Vous pouvez passer diverses options à plink. Ceci est facultatif.
  • connexion - Cela contiendra les informations de connexion du serveur Linux auquel vous souhaitez vous connecter. Diverses méthodes de connexion sont expliquées dans les exemples ci-dessous.
  • commande - Il s'agit de la commande qui doit être exécutée sur le serveur Linux distant. Ceci est facultatif.

Bien que la commande soit facultative, lorsque vous ne la donnez pas, elle affichera une session interactive brute, qui aura beaucoup de caractères non imprimables et non lisibles à l'écran. Comme expliqué précédemment, plink n'est pas destiné à être utilisé comme session interactive. Utilisez du mastic pour une session interactive.

Pour l'instant, voyons différentes méthodes pour utiliser la connexion.

Tout d'abord, vous pouvez simplement donner l'adresse IP du serveur distant. Cela demandera alors le nom d'utilisateur et le mot de passe pour se connecter.

C:\>plink 192.168.101.1
login as: root
[email protected]'s password:

Ou, vous pouvez également utiliser le nom d'utilisateur en utilisant le symbole @ comme indiqué ci-dessous. Cela ne demandera que le mot de passe, car nous avons spécifié le nom d'utilisateur.

C:\>plink [email protected]
Using username "root".
[email protected]'s password:

Vous pouvez également transmettre le nom d'utilisateur à l'aide de l'option -l comme indiqué ci-dessous :

C:\>plink 192.168.101.1 -l mysql

Vous pouvez également utiliser le nom d'une session putty existante. Dans cet exemple, j'utilise la session putty enregistrée existante appelée "devdb". Il s'agit de la méthode d'utilisation recommandée, car vous pouvez apporter ici toutes les informations de configuration de PuTTY pour cette session "devdb" particulière.

C:\>plink devdb
Using username "root".
[email protected]'s password:

Le -load suivant est exactement le même que ci-dessus.

C:\>plink -load devdb
Using username "root".
[email protected]'s password:

Comme vous le voyez ci-dessous, une fois connecté, vous obtiendrez une invite de commande. Mais, faire quoi que ce soit ici affichera des caractères non conviviaux.

C:\>plink devdb
Using username "root".
[email protected]'s password:
?]0;root@devdb:~[root@devdb ~]#
?]0;root@devdb:~[root@devdb ~]#
?]0;root@devdb:~[root@devdb ~]# ?[Kls -altr
total 326432
drwx------.  2 root root      4096 Jan 23  2016 ?[01;34m.ssh?[0m
drwxr-xr-x.  2 root root      4096 May  9  2016 ?[01;3Documents?[0m
drwxr-xr-x.  2 root root      4096 May  8 12:41 ?[01;3Downloads?[0m
?[m?]0;root@devdb:~[root@devdb ~]#

Encore une fois, pour une session SSH interactive, veuillez utiliser PuTTY.

Sur une note connexe, même si vous utilisez PuTTY depuis un certain temps, vous trouverez peut-être quelques conseils utiles :10 trucs et astuces impressionnants de PuTTY que vous ne saviez probablement pas

3. Plink Session SSH non interactive pour exécuter une commande à distance

En utilisant plink, à partir de Windows, vous pouvez exécuter une commande sur le serveur Linux sans aucune interaction de l'utilisateur et afficher simplement la sortie.

Pour cela, passez la commande comme dernier argument au plink comme indiqué ci-dessous.

Dans l'exemple suivant, il exécutera la commande "crontab -l" sur le serveur distant et affichera la sortie.

C:\>plink [email protected] crontab -l
no crontab for root

Si vous souhaitez exécuter plusieurs commandes, regroupez-les comme indiqué ci-dessous.

C:\>plink [email protected] (hostname;crontab -l)
devdb.thegeekstuff.com
no crontab for root

Ce qui suit exécutera le shellscript db-backup.sh sur le serveur Linux distant. Mais, vous lancez cela à partir de votre machine Windows.

plink [email protected] /root/bin/db-backup.sh

Quelques points à garder à l'esprit :

  • Si la commande ci-dessus demande un mot de passe, et si vous ne voulez pas que cela se produise, vous devez configurer l'authentification par clé publique-privée de manière appropriée afin que le serveur Linux distant ne demande pas de mot de passe.
  • Vous pouvez également transmettre le mot de passe en tant qu'option de ligne de commande à plink, comme illustré dans l'un des exemples ci-dessous.
  • En outre, si ce qui précède affiche un message d'erreur concernant un protocole non valide, vous devez transmettre le protocole approprié, comme indiqué dans l'exemple suivant.

4. Exécuter plusieurs commandes Linux à partir d'un fichier Windows

Au lieu de spécifier toutes les commandes à exécuter sur le serveur Linux distant dans la ligne de commande plink, vous pouvez également les mettre dans un fichier texte et spécifier le fichier en tant que paramètre du plink.

Par exemple, créez le fichier suivant appelé commands.txt sur votre Windows.

C:\>type commands.txt
hostname
service mysql stop
yum -y install httpd
service mysql start
service httpd start
crontab -l

Maintenant, pour exécuter toutes les commandes ci-dessus sur le serveur Linux distant une par une dans l'ordre, exécutez la commande plink suivante sur votre ordinateur portable Windows.

C:\>plink [email protected] -m C:\commands.txt

5. Spécifiez le protocole de connexion

Plink autorise les protocoles suivants :SSH, Telnet, Remote Login (rlogin), Raw, Serial Connection

Le plus populaire et le défaut est SSH. Utilisez -ssh comme indiqué ci-dessous.

C:\>plink -ssh [email protected]

Pour Telnet :

C:\>plink -telnet [email protected]

Pour la connexion à distance à l'aide de rlogin :

C:\>plink -rlogin [email protected]

Pour brut :

C:\>plink -raw [email protected]
SSH-2.0-OpenSSH_5.3

Si vous essayez de spécifier un protocole particulier et que vous obtenez l'erreur "ERREUR FATAL :Erreur réseau :Connexion refusée", cela signifie que le serveur distant ne prend pas en charge le protocole spécifié.

Si vous ne souhaitez pas spécifier le protocole sur la ligne de commande :

  • Vous pouvez utiliser une session PuTTY enregistrée qui a déjà le protocole défini pour cette session particulière.
  • Ou, vous pouvez utiliser la variable d'environnement Windows appelée PLINK_PROTOCOL et définir la valeur en conséquence, qui sera utilisée par plink.

6. Spécifiez le mot de passe SSH comme argument Plink

Si vous ne disposez pas de la configuration d'authentification basée sur une clé, vous pouvez transmettre le mot de passe en tant que paramètre dans la ligne de commande. Inutile de dire que cette méthode n'est pas recommandée.

Cela se connectera au serveur en tant que root en utilisant le mot de passe spécifié par l'option -pw, et exécutera toutes les commandes Linux données et affichera la sortie sur votre invite de commande Windows.

C:\>plink [email protected] -pw SecretRootPwd (date;hostname;ls -l)

Bien sûr, la méthode la plus simple consiste à utiliser une session putty enregistrée (par exemple, devdb) au lieu de spécifier le nom d'utilisateur et l'adresse IP comme indiqué ci-dessous.

C:\>plink devdb -pw SecretRootPwd (date;hostname;ls -l)

7. Déboguer les problèmes de Plink

Tout d'abord, assurez-vous d'avoir la dernière version de plink. Utilisez l'option -V (V majuscule) comme indiqué ci-dessous. La version stable actuelle est la 0.69

C:\>plink -V
plink: Release 0.69
Build platform: 64-bit Windows
Compiler: Visual Studio 2015 / MSVC++ 14.0 (_MSC_VER=1900)
Source commit: b1829b81b5c0d12dcc91f6b50b0b4d83c3df6a8e

Ensuite, utilisez l'option -v (v minuscule) comme indiqué ci-dessous pour une sortie plus détaillée.

C:\>plink -v devdb service httpd restart
Connecting to 192.168.101.1 port 22
We claim version: SSH-2.0-PuTTY_Release_0.69
Server version: SSH-2.0-OpenSSH_5.3
We believe remote version has SSH-2 channel request bug
Using SSH protocol version 2
Doing Diffie-Hellman group exchange
Doing Diffie-Hellman key exchange with hash SHA-256
Server also has ssh-dss host key, but we don't know it
Host key fingerprint is:
ssh-rsa 2048 2f:d2:c1:7f:db:a1:16:21:d2:f4:31:f9:ae:96:be:89
Initialised AES-256 SDCTR client->server encryption
Initialised HMAC-SHA1 client->server MAC algorithm
Initialised AES-256 SDCTR server->client encryption
Initialised HMAC-SHA1 server->client MAC algorithm
Using username "root".
Using SSPI from SECUR32.DLL
Attempting GSSAPI authentication
GSSAPI authentication request refused
Sent password
Access granted
Opening session as main channel
Opened main channel
Started a shell/command
..

Server sent command exit status 0
Disconnected: All channels closed

8. Spécifiez le port SSH comme option Plink

Par défaut pour SSH, il se connectera au port 22. Mais, sur votre serveur Linux, si SSH est configuré pour s'exécuter sur un port différent, utilisez l'option -P dans plink pour spécifier le port.

Dans l'exemple suivant, plink se connectera au serveur Linux distant sur le port 25.

C:\>plink [email protected] -P 25 crontab -l

Lorsque vous utilisez une session PuTTY enregistrée et l'option -P, au lieu d'utiliser le port de la session enregistrée, il utilisera le port donné.

C:\>plink devdb -P 25 crontab -l

9. Fichiers journaux Plink pour les connexions SSH

Pour le protocole SSH dans Plink, il existe quelques options de journalisation utiles.

L'option –sshlog suivante enregistrera les journaux dans le fichier donné (sshlog.txt).

C:\>plink devdb -sshlog sshlog.txt (date;hostname;ls -l)

Ceci est le contenu partiel de la sortie sshlog.txt

=~=~=~=~=~=~=~=~=~=~=~= PuTTY log 2017.05.11 11:40:57 =~=~=~=~=~=~=~=~=~=~=~=
Event Log: Writing new session log (SSH packets mode) to file: sshlog.txt
Event Log: Connecting to 192.168.101.1 port 22
Event Log: We claim version: SSH-2.0-PuTTY_Release_0.69
Event Log: Server version: SSH-2.0-OpenSSH_5.3
Event Log: We believe remote version has SSH-2 channel request bug
Event Log: Using SSH protocol version 2
Outgoing packet #0x0, type 20 / 0x14 (SSH2_MSG_KEXINIT)
  00000000  ed 8e ff c9 d3 67 cf 95 0e 8f 1a 4d 6d 65 6f 25  .....g.....Mmeo%
  00000010  00 00 00 f0 63 75 72 76 65 32 35 35 31 39 2d 73  ....curve25519-s
......

Outgoing packet #0xc, type 96 / 0x60 (SSH2_MSG_CHANNEL_EOF)
  00000000  00 00 00 00                                      ....
Outgoing packet #0xd, type 97 / 0x61 (SSH2_MSG_CHANNEL_CLOSE)
  00000000  00 00 00 00                                      ....
Event Log: Disconnected: All channels closed

Pour un journal plus détaillé, utilisez l'option -sshrawlog. Veuillez noter que la taille du fichier sera plus grande que celle ci-dessus, car cela stockera beaucoup plus d'informations dans le fichier journal.

De plus, cela prendra plus de temps à s'exécuter que la commande ci-dessus, car l'option sshrawlog collecte plus d'informations de journal que l'option sshlog normale.

C:\>plink devdb -sshrawlog sshrawlog.txt (date;hostname;ls -l)

10. Spécifiez le protocole SSH (SSH-1 ou SSH-2)

Par défaut, il utilisera le protocole SSH-2, qui peut également être spécifié à l'aide de l'option -2 comme indiqué ci-dessous.

C:\>plink devdb -2 (hostname;ls -l)
devdb.thegeekstuff.com
total 326380

Pour le protocole SSH-1, utilisez l'option -1 comme indiqué ci-dessous. Si votre serveur ne le prend pas en charge, vous obtiendrez l'erreur suivante.

C:\>plink devdb -pw -1 (hostname;ls -l)
FATAL ERROR: SSH protocol version 1 required by our configuration but not provided by server

11. Spécifiez le protocole IP (IPv4 ou IPv6)

Par défaut, il utilisera IPv4, qui peut également être spécifié à l'aide de l'option -4 comme indiqué ci-dessous.

C:\>plink devdb -4 (hostname;ls -l)

Pour utiliser IPv6, utilisez l'option-6 comme indiqué ci-dessous.

C:\>plink devdb -6 (hostname;ls -l)

12. Utiliser le fichier de clé privée pour l'authentification avec Plink

Utilisez l'option -i pour spécifier l'emplacement du fichier de clé privée qui doit être utilisé pour l'authentification.

Dans l'exemple suivant, il utilisera le fichier devdb.ppk du répertoire C:\Downloads.

C:\>plink -i "C:\Downloads\devdb.ppk" [email protected] hostname

Remarque :Vous obtiendrez "Le serveur a refusé notre clé", si la clé donnée n'est pas correctement configurée pour être utilisée avec votre serveur Linux.

Si le fichier clé n'est pas trouvé (par exemple, lorsque vous donnez un mauvais nom de répertoire), vous obtiendrez l'erreur suivante :

C:\>plink -i "D:\Data\devdb.ppk" [email protected] hostname
Unable to use key file "C:\Users\ramesh\Downloads\devdb.ppk" (unable to open file)
[email protected]'s password: 

Si vous spécifiez une clé qui n'est pas au format approprié, vous obtiendrez le message d'erreur suivant.

C:\>plink -i "C:\Downloads\devdb.key" [email protected] hostname
Unable to use key file "C:\Downloads\devdb.key" (OpenSSH SSH-2 private key (old PEM format))

13. Options d'activation et de désactivation supplémentaires pour Plink SSH

Vous pouvez également utiliser les options plink SSH suivantes :

  • -X pour activer le transfert X11
  • -X pour désactiver le transfert X11
  • -A pour activer le transfert d'agent
  • -a pour désactiver le transfert d'agent
  • -t pour activer l'allocation pty
  • -T pour désactiver l'allocation de pty
  • -noagent pour désactiver l'utilisation de Pageant
  • -agent pour activer l'utilisation de Pageant
  • -C pour activer la compression

14. Empreinte digitale et HostKey avec Plink

Utilisez l'option -pgpfp qui affichera les détails de l'empreinte PGP pour PuTTY. En règle générale, vous pouvez l'utiliser pour établir la confiance entre l'exécutable plink.exe et un autre programme ou exécutable auquel vous essayez de vous connecter.

C:\>plink -pgpfp
PuTTY Master Key as of 2015 (RSA, 4096-bit):
  440D E3B5 B7A1 CA85 B3CC  1718 AB58 5DC6 0467 6F7C

Original PuTTY Master Key (RSA, 1024-bit):
  8F 15 97 DA 25 30 AB 0D  88 D1 92 54 11 CF 0C 4C
Original PuTTY Master Key (DSA, 1024-bit):
  313C 3E76 4B74 C2C5 F2AE  83A8 4F5E 6DF5 6A93 B34E

En outre, vous pouvez utiliser hostkey dans le plink pour vous connecter au serveur distant en utilisant l'option -hostkey.

C:\>plink devdb -hostkey aa:dd:b1:f1:f8:00:4c:36:63:ec:cf:92:16:e6:df:26 hostname

15. Option Plink -batch pour les fichiers batch Windows

Si vous exécutez plink dans un fichier de commandes Windows, il est recommandé d'utiliser l'option -batch.

C:>plink -batch devdb [complex-linux-command]

Dans l'exemple ci-dessus, si la commande complex-linux échoue, ou demande une entrée de l'utilisateur, ou se bloque, etc., votre script Windows Batch n'attendra pas. Au lieu de cela, plink abandonnera simplement la commande et le script batch échouera.

C'est probablement ce à quoi vous vous attendriez au lieu que votre travail de fichier batch Windows attende ou se bloque.

Utilisez donc l'option -batch dans plink lorsque vous écrivez des scripts batch Windows à l'aide de plink.


Linux
  1. Commande SCP Linux - Comment transférer un fichier SSH de distant à local

  2. Comment effectuer un bureau à distance de Windows vers un bureau Linux à l'aide de XRDP

  3. Connectez-vous à Linux à partir de Windows en utilisant PuTTY

  4. Copie exacte des fichiers de NTFS vers un autre NTFS en utilisant Linux

  5. scp de Linux distant vers Windows local avec des espaces dans le chemin local

Commande lsof sous Linux (10 exemples)

Commandes SSH sous Linux avec exemples d'utilisation

Passer de Windows à Linux

Exemples de commandes Tmux pour gérer plusieurs sessions de terminal sous Linux

Comment télécharger des fichiers à partir de serveurs Linux distants

Comment exécuter la commande SUDO dans WinSCP pour transférer des fichiers de Windows vers Linux