Ich möchte so etwas machen:
tell application "Terminal"
activate
do script "ssh [email protected]"
-- // write user's password
-- // write some linux commands to remote server
end tell
Um sich beispielsweise am Server anzumelden, geben Sie das Kennwort ein, melden Sie sich dann bei mysql an und wählen Sie eine Datenbank aus.
Ich schreibe das jeden Tag und es wäre wirklich hilfreich, es in ein Skript zu bündeln.
Gibt es auch einen Hinweis darauf, welche Befehle, Eigenschaften, Funktionen usw. Anwendungen (Terminal, Finder usw.) zur Verwendung in Applescript zur Verfügung haben? Vielen Dank!
EDIT: Lassen Sie mich das klarstellen: Ich möchte nicht mehrere 'Skript ausführen' machen, da ich es versucht habe und nicht funktioniert . Ich möchte ein Terminalfenster öffnen und emulieren Sie dann einen Menschen, der einige Zeichen eingibt und die Eingabetaste drückt. Könnten Passwörter sein, Befehle, was auch immer, einfach Zeichen an das Terminal senden, das gerade ssh ausführt. Ich habe den Tastenanschlag ausprobiert und scheint nicht zu funktionieren.
Stellen Sie zunächst eine Verbindung zum Server her und warten Sie 6 Sekunden (Sie können das ändern), und führen Sie dann alles aus, was Sie auf dem Remote-Server benötigen
tell application "Terminal"
set currentTab to do script ("ssh [email protected];")
delay 6
do script ("do something remote") in currentTab
end tell
Wie EvanK feststellte, öffnet jede Skriptzeile ein neues Fenster, das Sie jedoch ausführen können
Zwei Befehle mit demselben Skript werden durch ein Semikolon getrennt. Zum Beispiel:
tell application "Terminal"
do script "date;time"
end tell
Die Grenze scheint jedoch zwei Befehle zu sein.
Sie können jedoch "in Fenster 1" an den do-Skriptbefehl anhängen (für jedes do-Skript nach dem ersten), um den gleichen Effekt zu erzielen und so viele Befehle auszuführen, wie Sie in demselben Fenster benötigen:
tell application "Terminal"
do script "date"
do script "time" in window 1
do script "who" in window 1
end tell
Beachten Sie, dass ich gerade den Befehl who, date und time als Beispiel verwendet habe. Ersetzen Sie .__ durch die Befehle, die Sie benötigen.
Hier ist ein anderer Weg, aber mit dem Vorteil, dass es Terminal startet, es nach vorne bringt und nur ein Fenster erstellt.
Ich mag das, wenn ich die Ergebnisse meines Skripts ordentlich präsentieren möchte.
tell application "Terminal"
activate
set Shell to do script "echo 1" in window 1
do script "echo 2" in Shell
do script "echo 3" in Shell
end tell
Wie wäre es damit? Es gibt keine Notwendigkeit für Schlüsselcodes (zumindest in Lion, bei früheren Versionen nicht sicher), und eine Subroutine vereinfacht das Hauptskript.
Das folgende Skript wird ssh an localhost als Benutzer "me" senden, das Kennwort "myPassw0rd" nach einer Verzögerung von 1 Sekunde eingeben, ls ausgeben, 2 Sekunden verzögern und dann beenden.
tell application "Terminal"
activate
my execCmd("ssh [email protected]", 1)
my execCmd("myPassw0rd", 0)
my execCmd("ls", 2)
my execCmd("exit", 0)
end tell
on execCmd(cmd, pause)
tell application "System Events"
tell application process "Terminal"
set frontmost to true
keystroke cmd
keystroke return
end tell
end tell
delay pause
end execCmd
Sie müssen das Terminal nicht "anweisen", um etwas zu tun. AppleScript kann Shell-Skripts direkt ausführen.
set theDir to "~/Desktop/"
do Shell script "touch " & theDir &"SomeFile.txt"
oder Wasauchimmer ...
Warum nicht verwenden erwarten:
tell application "Terminal"
activate
set currentTab to do script ("expect -c 'spawn ssh [email protected]; expect \"*?assword:*\"; send \"MySecretPass
\"; interact'")
end tell
In Ihrer Frage geht es speziell darum, wie Sie mit Applescript das tun können, was Sie wollen. Aber für das bestimmte beschriebene Beispiel möchten Sie vielleicht als Lösung "erwarten".
Ein bisschen verwandt, möchten Sie vielleicht Shuttle ( http://fitztrev.github.io/shuttle/ ) sehen, es ist ein SSH-Kontextmenü für OSX.
Ich könnte mich irren, aber ich denke, die Integration von Applescript Terminal ist ein One-Shot-Deal ... Das heißt, jeder do script
-Aufruf ist wie das Öffnen eines anderen Terminalfensters. Ich glaube also nicht, dass Sie überhaupt damit interagieren können.
Sie können die öffentlichen SSH-Schlüssel kopieren, um die Kennwortabfrage zu verhindern, und dann alle zusammengeführten Befehle ausführen (warning: Folgendes ist völlig ungetestet):
tell application "Terminal"
activate
do script "ssh [email protected] '/home/jdoe/dosomestuff.sh && /home/jdoe/dosomemorestuff.sh'"
end tell
Alternativ können Sie die SSH-Befehle und nachfolgende Befehle mit Expect in ein Shell-Skript einfassen und dieses Shell-Skript dann aus Ihrem Applescript aufrufen.
richten Sie das Kennwort ohne Kennwort ein (ssh-keygen
und fügen Sie den Schlüssel zu ~/.ssh/authorized_keys
auf dem Server hinzu). Machen Sie einen Eintrag in ~/.ssh/config
(auf Ihrem Desktop), so dass beim Ausführen von ssh mysqlserver der Benutzer @ hostname aufgerufen wird. Oder erstellen Sie einen Shell-Alias wie gotosql, der zu ssh [email protected] -t 'mysql_client ...'
to erweitert wird Starten Sie den MySQL-Client interaktiv auf dem Server.
Dann brauchen Sie wahrscheinlich die Antwort einer anderen Person, um den Prozess danach zu skripieren, da ich nicht weiß, wie man Startbefehle für mysql setzt.
Zumindest hält das Ihr SSH-Passwort aus dem Skript!
Petruza,
Verwenden Sie anstelle des Tastenanschlags den Tastencode.
Das folgende Beispiel sollte für Sie funktionieren.
tell application "System Events"
tell application process "Terminal"
set frontmost to true
key code {2, 0, 17, 14}
keystroke return
end tell
end tell
Das obige Beispiel sendet die Zeichen {tag} An Terminal und dann
Der Keystroke-Befehl return gibt den Befehl ein. Verwenden Sie das obige Beispiel
mit den von Ihnen benötigten Schlüsselcodes Sie können tun, was Sie versuchen.
Das letzte Beispiel enthält Fehler unter 10.6.8 (Build 10K549), die durch das Schlüsselwort "pause" verursacht werden.
Wenn Sie es durch das Wort "wait" ersetzen, funktioniert es:
tell application "Terminal"
activate
my execCmd("ssh [email protected]", 1)
my execCmd("myPassw0rd", 0)
my execCmd("ls", 2)
my execCmd("exit", 0)
end tell
on execCmd(cmd, wait)
tell application "System Events"
tell application process "Terminal"
set frontmost to true
keystroke cmd
keystroke return
end tell
end tell
delay wait
end execCmd
was ist mit so etwas:
tell application "Terminal"
activate
do Shell script "Sudo dscl localhost -create /Local/Default/Hosts/cc.josmoe.com IPAddress 127.0.0.1"
do Shell script "Sudo dscl localhost -create /Local/Default/Hosts/cc.josmos2.com IPAddress 127.0.0.1"
end tell
Als saubere Lösung versuchen Sie
$ open -a /Applications/Utilities/Terminal.app *.py
oder
$ open -b com.Apple.terminal *.py
Wenn die Shell gestartet wurde, können Sie zu Voreinstellungen> Shell> gehen, um sie zu beenden, wenn kein Fehler vorliegt.
Das ist es.
Ich habe dieses Skript gebaut. Es ist in Yosemite und es ist ein Bash-Skript, das AppleScript verwendet, um eine Liste von Benutzern für SSH-Server auszuwählen. Grundsätzlich definieren Sie eine IP und dann die Benutzernamen. Wenn die Anwendung gestartet wird, werden Sie gefragt, als wen Sie sich anmelden möchten. Das SSH-Terminal wird gestartet und mit der Eingabe eines Kennworts angemeldet.
(***
* --- --- --- --- ---
* JD Sports Fashion plc
* Apple Script
* Khaleel Mughal
* --- --- --- --- ---
* #SHELLSTAGINGSSHBASH
* --- --- --- --- ---
***)
set stagingIP to "192.162.999.999"
set faciaName to (choose from list {"admin", "marketing", "photography_cdn"})
if faciaName is false then
display dialog "No facia was selected." with icon stop buttons {"Exit"} default button {"Exit"}
else
set faciaName to (item 1 of faciaName)
tell application "Terminal"
activate
do script "ssh " & faciaName & "@" & stagingIP & ""
end tell
end if
Ich kann es nur wärmstens empfehlen. Nathan Pickmans Beitrag oben über Shuttle ( http://fitztrev.github.io/shuttle/ ) .. eine sehr intelligente und einfache Anwendung.