J'utilise PuTTY pour me connecter à distance à l'hôte de mon école. Lors de la connexion, nous devons suivre ces étapes:
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
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:
PuTTY.bat
. Cela ouvre PuTTY et me connecte à l'hôte.tcsh sql
. Cela ajoute l'outil Oracle à mon hôte et me connecte à la base de données SQL.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
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
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.
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.
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