it-swarm.com.de

PuTTY-Scripting zum Anmelden am Host

Ich verwende PuTTY, um sich remote am Host meiner Schule anzumelden. Nach dem Einloggen müssen wir folgende Schritte ausführen:

  1. benutzername eingeben
  2. passwort eingeben
  3. befehl "Oracle hinzufügen"
  4. befehl "sqlplus"
  5. benutzername eingeben
  6. passwort eingeben

Ich werde mich im Laufe dieses Semesters oft bei diesem Host anmelden und ich hoffte, ein Skript zu erstellen, das die Redundanz der obigen Schritte beseitigt. Wenn ich die offensichtlichen Sicherheitslücken ignoriere, wenn ich mein Passwort im Skript habe, wie würde ich das erreichen? Ich habe keine Erfahrung mit Skripten, daher wird Ihr Feedback sehr geschätzt. Vielen Dank!

Bearbeiten: Ich habe mit den Befehlszeilenoptionen für PuTTY herumgespielt und konnte die Schritte 1-2 mit folgendem Befehl umgehen:

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

Ich habe auch eine Shell-Datei erstellt, die so aussieht:

#!/bin/bash

add Oracle10g
sqlplus username password

Wenn ich versuche, diese Option mit der Option -m zur Befehlszeile hinzuzufügen, scheint es, als meldet sich PuTTY beim Host an und wird sofort beendet. Gibt es eine Möglichkeit, meine Sitzung nach dem Ausführen der Shell-Datei offen zu halten, oder verwende ich die Option -m falsch? Hier ist ein Link zu einem PuTTY-Leitfaden, den ich verfolgt habe: http://the.earth.li/~sgtatham/PuTTY/0.60/htmldoc/Chapter3.html .

Hier ist der Gesamtbefehl, den ich von der Befehlszeile aus ausführen möchte:

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

Das mit Hilfe eines Freundes herausgefunden. Die Option -m PuTTY beendet Ihre Sitzung unmittelbar nach dem Ausführen der Shell-Datei. Stattdessen habe ich ein Batch-Skript namens PuTTY.bat mit folgendem Inhalt auf meinem Windows-Computer erstellt:

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

Dies meldet mich remote am Linux-Host an. Auf der Host-Seite habe ich eine Shell-Datei namens sql mit folgendem Inhalt erstellt:

#!/bin/tcsh

add Oracle10g
sqlplus username password

Der Linux-Build meines Hosts verwendete tcsh. Andere Linux-Builds verwenden möglicherweise bash. Ersetzen Sie also einfach tcsh durch bash.

Zusammenfassend lässt sich sagen, dass die Automatisierung dieser Schritte nun in zwei einfachen Schritten erfolgt:

  1. Doppelklicken Sie auf PuTTY.bat. Dies öffnet PuTTY und meldet mich beim Host an.
  2. Führen Sie den Befehl tcsh sql aus. Dadurch wird das Oracle-Tool meinem Host hinzugefügt und in der SQL-Datenbank angemeldet.
8
raphnguyen

Ich bin nicht sicher, warum in den vorherigen Antworten nicht vorgeschlagen wurde, dass das ursprüngliche Poster ein Shell-Profil (bashrc, .tcshrc usw.) erstellt hat, das seine Befehle bei jeder Anmeldung auf der Serverseite automatisch ausführt. 

Die Suche, die mich auf diese Seite brachte, war etwas anders - ich wollte mehrere PuTTY-Verknüpfungen für denselben Host, die verschiedene Startbefehle ausführen würden. 

Ich habe zwei Lösungen gefunden, die beide funktionierten: 

(Hintergrund) Ich habe einen Ordner mit einer Vielzahl von PuTTY-Verknüpfungen, die jeweils die Eigenschaft "Ziel" in der Registerkarte "Verknüpfung" haben und etwa so aussehen: 

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

mit jeder Ladung, die einem PuTTY-Profil entspricht, das ich gespeichert hatte (mit verschiedenen Hosts auf der Registerkarte "Sitzung"). (Meistens unterscheiden sie sich nur in Farbschemata - Ich möchte, dass jede Gruppe verwandter Aufgaben ein Farbschema im Terminalfenster gemeinsam hat, wobei kritische Aufgaben, wie das Anmelden als Stamm eines Produktionssystems, nur in deutlich farbigen Fenstern ausgeführt werden.)

Die Windows-Eigenschaften des Ordners sind auf sehr sauber und reduziert eingestellt - er fungiert als kleine Konsole mit Verknüpfungssymbolen für jede meiner häufigen Remote-PuTTY- und RDP-Verbindungen.

(Lösung 1) Wie in anderen Antworten erwähnt, wird der -m-Schalter verwendet, um ein Skript auf der Windows-Seite für die Ausführung zu konfigurieren. Der -t-Schalter wird verwendet, um verbunden zu bleiben, aber ich habe festgestellt, dass es sich um Ordnung handelt - empfindlich, wenn ich wollte, dass es ohne Beenden ausgeführt wird 

Was ich nach vielem Ausprobieren endlich zur Arbeit bekam, war: 

(Abkürzungszielfeld):

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

wo die ausgeführte Datei aussah 

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

(keine Semikolons erforderlich)

Dies führt den Skriptbefehl aus (in meinem Fall wird nur "Hallo, Welt" auf dem Terminal gedruckt) und legt eine Variable fest, mit der meine Remote-Sitzung interagieren kann. 

Hinweis zum Debuggen: Wenn Sie PuTTY ausführen, wird das Skript -m geladen. Wenn Sie das Skript bearbeiten, müssen Sie PuTTY neu starten, anstatt nur die Sitzung neu zu starten. 

(Lösung 2) Diese Methode fühlt sich viel sauberer an, da sich die Gehirne auf der entfernten Unix-Seite anstatt auf der lokalen Windows-Seite befinden: 

Laden Sie von der PuTTY-Mastersitzung (nicht "Einstellungen bearbeiten" aus einer vorhandenen Sitzung) eine gespeicherte Konfiguration, und legen Sie auf der Registerkarte SSH den Fernbefehl fest auf: 

export PUTTYVAR=GREEN; bash -l

In meiner .bashrc habe ich dann einen Abschnitt, der auf dieser Variablen verschiedene Aktionen ausführt: 

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

(Lösung 3, nicht getestet)

Es sollte auch möglich sein, dass bash meine .bashrc überspringt und ein anderes Startskript ausführt, indem Sie dies in das PuTTY-SSH-Befehlsfeld eingeben:

bash --rcfile .bashrc_variant -l 
6
arp

Wenn Sie die -m-Option verwenden, weist PuTTY kein tty zu, führt den Befehl aus und wird beendet. Wenn Sie ein interaktives Skript (z. B. einen SQL-Client) ausführen möchten, müssen Sie ihm mitteilen, dass er ein tty mit -t zuweisen soll, siehe 3.8.3.12 -t and -T: control pseudo-terminal allocation. Sie vermeiden, ein Skript auf dem Server zu behalten, und müssen es auch nicht aufrufen, wenn Sie verbunden sind.

Ich verwende hier, um aus einer Batch-Datei eine Verbindung zu MySQL herzustellen:

#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

Ich möchte eine gemeinsame Lösung für diese Anforderungen vorschlagen, vielleicht ist es eine Verwendung für Sie: AutoIt . Mit diesem Programm können Sie Skripts über jedes Fenster wie PuTTY schreiben und alle Befehle ausführen, die Sie möchten (z. B. das Drücken von Tasten oder das Klicken mit der Maus in Textboxen oder Schaltflächen).

Auf diese Weise können Sie alle Schritte nachahmen, die Sie mit PuTTY immer machen.

0
Desty

mputty kann das, aber es scheint nicht immer zu funktionieren. (wenn diese Wartezeit zu langsam ist)

mputty verwendet PuTTY und erweitert PuTTY . Es gibt eine Option zum Ausführen eines Skripts . Wenn dies nicht funktioniert, stellen Sie sicher, dass die Wartezeit vor der Eingabe ein hoher Wert ist, oder erhöhen Sie diesen Wert. Siehe PuTTY-Sitzungen, dann Name der Sitzung, rechte Maustaste, Eigenschaften/Skriptseite.

0
Aftershock

sie können einen Befehl eingeben, nachdem Sie sich angemeldet haben, indem Sie den SSH-Abschnitt unten in PuTTY durchgehen. Sie sollten über die Option Remote-Befehl (Daten zum Senden an den Server) verfügen, die die beiden Befehle voneinander trennen. 

0
not tellin