web-dev-qa-db-fra.com

PuTTY scripting pour vous connecter à l'hôte

J'utilise PuTTY pour me connecter à distance à l'hôte de mon école. Lors de la connexion, nous devons suivre ces étapes:

  1. saisissez votre nom d'utilisateur
  2. entrer le mot de passe
  3. commande "add Oracle"
  4. commande "sqlplus"
  5. saisissez votre nom d'utilisateur
  6. entrer le mot de passe

Je me connecterai souvent à cet hôte au cours de ce semestre et j'espérais créer un script qui éliminerait la redondance des étapes ci-dessus. En ignorant les lacunes de sécurité évidentes liées à la présence de mon mot de passe dans le script, comment pourrais-je y parvenir? Je n'ai aucune expérience en matière de script, vos commentaires sont donc grandement appréciés. Merci!

Edit: J'ai joué avec les options de ligne de commande pour PuTTY et j'ai pu contourner les étapes 1 et 2 en utilisant:

PuTTY -load "Host" -l username -pw password

J'ai également créé un fichier Shell qui ressemble à ceci:

#!/bin/bash

add Oracle10g
sqlplus username password

Lorsque j'essaie d'ajouter cette option à la ligne de commande à l'aide de l'option -m, il semble que PuTTY se connecte à l'hôte, puis se ferme immédiatement. Existe-t-il un moyen de garder ma session ouverte après avoir exécuté le fichier Shell ou j'utilise mal l'option -m? Voici un lien vers un guide PuTTY que j'ai suivi: http://the.earth.li/~sgtatham/PuTTY/0.60/htmldoc/Chapter3.html .

Voici la commande totale que j'essaie d'exécuter à partir de la ligne de commande:

PuTTY -load "Host" -l username -pw password -m c:\test.sh
10
raphnguyen

Compris cela avec l'aide d'un ami. L'option -m PuTTY met fin à votre session immédiatement après avoir exécuté le fichier Shell. Ce que j'ai fait à la place, c'est que j'ai créé un script batch appelé PuTTY.bat avec le contenu suivant sur ma machine Windows:

@echo off
PuTTY -load "Host" -l username -pw password

Cela me connecte à distance à l'hôte Linux. Du côté de l'hôte, j'ai créé un fichier Shell appelé sql avec le contenu suivant:

#!/bin/tcsh

add Oracle10g
sqlplus username password

La version Linux de mon hôte utilisait tcsh. Les autres versions de Linux peuvent utiliser bash, il vous suffit donc de remplacer tcsh par bash et tout devrait bien se passer.

Pour résumer, l’automatisation de ces étapes s’effectue désormais en deux étapes simples:

  1. Double-cliquez sur PuTTY.bat. Cela ouvre PuTTY et me connecte à l'hôte.
  2. Exécutez la commande tcsh sql. Cela ajoute l'outil Oracle à mon hôte et me connecte à la base de données SQL.
8
raphnguyen

Je ne suis pas sûr de savoir pourquoi les réponses précédentes n’avaient pas suggéré que l’affiche originale mette en place un profil Shell (bashrc, .tcshrc, etc.) qui exécutait automatiquement ses commandes à chaque fois qu’il se connectait côté serveur. 

La quête qui m'a amené à cette page d'aide était un peu différente - je voulais plusieurs raccourcis PuTTY pour le même hôte qui exécuteraient différentes commandes de démarrage. 

Je suis venu avec deux solutions, les deux qui ont fonctionné: 

(arrière-plan) J'ai un dossier avec une variété de raccourcis PuTTY, chacun avec la propriété "cible" dans l'onglet de raccourci ressemblant à quelque chose comme: 

"C:\Program Files (x86)\PuTTY\putty.exe" -load Host01

avec chaque charge correspondant à un profil PuTTY que j'avais enregistré (avec différents hôtes dans l'onglet "Session"). (La plupart du temps, ils ne diffèrent que par leurs couleurs - j'aime bien que chaque groupe de tâches liées partage un même jeu de couleurs dans la fenêtre du terminal, avec des tâches critiques, telles que la connexion en tant que root sur un système de production, effectuées uniquement dans des fenêtres de couleurs distinctes.)

Les propriétés Windows du dossier sont définies sur très propre et simplifié - il fonctionne comme une petite console avec des icônes de raccourci pour chacune de mes connexions distantes PuTTY et RDP fréquentes.

(solution 1) Comme mentionné dans d'autres réponses, le commutateur -m est utilisé pour configurer un script sous Windows, le commutateur -t est utilisé pour rester connecté, mais j'ai découvert qu'il s'agissait d'un ordre. -sensible si je voulais le faire fonctionner sans quitter 

Après de nombreux essais et erreurs, je me suis finalement mis au travail: 

(champ cible du raccourci):

"C:\Program Files (x86)\PuTTY\putty.exe" -t -load "SSH Proxy" -m "C:\Users\[me]\Documents\hello-world-bash.txt"

où le fichier en cours d'exécution ressemblait 

echo "Hello, World!"
echo ""
export PUTTYVAR=PROXY
/usr/local/bin/bash

(aucun point-virgule requis)

Ceci exécute la commande scriptée (dans mon cas, imprimant simplement "Hello, world" sur le terminal) et définit une variable avec laquelle ma session distante peut interagir. 

Note pour le débogage: lorsque vous exécutez PuTTY, il charge le script -m. Si vous le modifiez, vous devez relancer PuTTY au lieu de simplement redémarrer la session. 

(solution 2) Cette méthode semble beaucoup plus propre, car le cerveau se trouve du côté Unix distant au lieu du côté Windows local: 

À partir de la session maître PuTTY (et non pas "modifier les paramètres" d'une session existante), chargez une configuration enregistrée et, dans la commande à distance SSH, définissez la commande à distance pour: 

export PUTTYVAR=GREEN; bash -l

Ensuite, dans mon .bashrc, j'ai une section qui effectue différentes actions en fonction de cette variable: 

case ${PUTTYVAR} in
  "")
    echo "" 
    ;;
  "PROXY")
    # this is the session config with all the SSH tunnels defined in it
    echo "";
    echo "Special window just for holding tunnels open." ;
    echo "";
    Prompt_COMMAND='echo -ne "\033]0;Proxy Session @master01\$\007"'
    alias temppass="ssh keyholder.example.com makeonetimepassword"
    alias | grep temppass
    ;;
  "GREEN")
    echo "";
    echo "It's not easy being green"
    ;;
  "GRAY")
    echo ""
    echo "The gray ghost"
    ;;
  *)
    echo "";
    echo "Unknown PUTTYVAR setting ${PUTTYVAR}"
    ;;
esac

(solution 3, non essayé)

Il devrait également être possible de laisser bash sauter mon .bashrc et exécuter un script de démarrage différent, en le mettant dans le champ de commande PuTTY SSH:

bash --rcfile .bashrc_variant -l 
6
arp

Lorsque vous utilisez l'option -m, PuTTY n'alloue pas de terminal, il exécute la commande et se ferme. Si vous souhaitez exécuter un script interactif (tel qu'un client SQL), vous devez lui indiquer d'allouer un terminal avec -t, voir 3.8.3.12 -t and -T: control pseudo-terminal allocation. Vous éviterez de conserver un script sur le serveur et de devoir l'invoquer une fois que vous êtes connecté.

Voici ce que j'utilise pour me connecter à mysql à partir d'un fichier batch:

#mysql.bat start PuTTY -t -load "sessionname" -l username -pw password -m c:\mysql.sh

#mysql.sh mysql -h localhost -u username --password="foo" mydb

https://superuser.com/questions/587629/PuTTY-run-a-remote-command-after-login-keep-the-Shell-running

2
Jonathan

Je veux suggérer une solution commune à ces exigences, c'est peut-être une utilisation pour vous: AutoIt . Avec ce programme, vous pouvez écrire des scripts au-dessus de toute fenêtre comme PuTTY et exécuter toutes les commandes souhaitées (comme appuyer sur un bouton ou cliquer avec la souris dans une zone de texte ou un bouton).

De cette façon, vous pouvez émuler toutes les étapes que vous faites toujours avec PuTTY.

0
Desty

mputty peut le faire, mais cela ne semble pas toujours fonctionner. (si cette période d'attente est trop lente)

mputty utilise PuTTY et étend PuTTY . Il existe une option permettant d'exécuter un script . Si cela ne fonctionne pas, assurez-vous que la période d'attente avant la saisie est une valeur élevée ou augmentez-la. Voir Sessions PuTTY, puis nom de la session, bouton droit de la souris, page de propriétés/script.

0
Aftershock

entrer une commande après vous être connecté peut être fait en passant par la section SSH au bas de PuTTY et vous devriez avoir une option Commande à distance (données à envoyer au serveur) séparer les deux commandes avec 

0
not tellin