Je veux faire quelque chose comme ça:
tell application "Terminal"
activate
do script "ssh [email protected]"
-- // write user's password
-- // write some linux commands to remote server
end tell
Par exemple, pour vous connecter au serveur, entrez le mot de passe, puis connectez-vous à mysql et sélectionnez un DB.
Je tape cela tous les jours et il serait vraiment utile de le regrouper dans un script.
De plus, existe-t-il une référence concernant les commandes, propriétés, fonctions, etc. disponibles pour les applications (Terminal, Finder, etc.) dans Applescript? Merci!
EDIT: Permettez-moi d’éclaircir ceci: Je ne veux pas faire plusieurs "scripts" car j’ai essayé et ne fonctionne pas . Je souhaite ouvrir une fenêtre de terminal puis émuler un humain en tapant certains caractères et en appuyant sur Entrée. Il peut s'agir de mots de passe, de commandes, peu importe, uniquement en envoyant des caractères au terminal qui exécute ssh. J'ai essayé la frappe et ne semble pas fonctionner.
Connectez-vous d'abord au serveur et attendez 6 secondes (vous pouvez le changer), puis exécutez ce que vous avez besoin sur le serveur distant en utilisant le même onglet
tell application "Terminal"
set currentTab to do script ("ssh user@server;")
delay 6
do script ("do something remote") in currentTab
end tell
Comme EvanK l’a déclaré, chaque ligne de script do ouvre une nouvelle fenêtre, mais vous pouvez exécuter
deux commandes avec le même script do en les séparant par un point-virgule. Par exemple:
tell application "Terminal"
do script "date;time"
end tell
Mais la limite semble être deux commandes.
Cependant, vous pouvez ajouter "dans la fenêtre 1" à la commande do script (pour chaque script après la première) pour obtenir le même effet et continuer à exécuter autant de commandes que nécessaire dans la même fenêtre:
tell application "Terminal"
do script "date"
do script "time" in window 1
do script "who" in window 1
end tell
Notez que je viens d'utiliser la commande who, date et heure comme exemple ... remplacez Par toutes les commandes dont vous avez besoin.
Voici une autre solution, mais avec l'avantage de pouvoir lancer Terminal, de le placer au premier plan et de créer une seule fenêtre.
J'aime ça quand je veux être présenté avec les résultats de mon script.
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
Que dis-tu de ça? Aucun code de clé n'est nécessaire (du moins dans Lion, je ne le savais pas plus tôt) et un sous-programme simplifie le script principal.
Le script ci-dessous va ssh sur localhost en tant qu'utilisateur "moi", saisit le mot de passe "myPassw0rd" après un délai de 1 seconde, lance ls, retarde 2 secondes, puis quitte.
tell application "Terminal"
activate
my execCmd("ssh me@localhost", 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
Vous n'avez pas besoin de "dire" à Terminal de faire quoi que ce soit. AppleScript peut faire des scripts Shell directement.
set theDir to "~/Desktop/"
do Shell script "touch " & theDir &"SomeFile.txt"
ou peu importe ...
Pourquoi ne pas utiliser attendre:
tell application "Terminal"
activate
set currentTab to do script ("expect -c 'spawn ssh user@IP; expect \"*?assword:*\"; send \"MySecretPass
\"; interact'")
end tell
Votre question porte précisément sur la façon de faire quoi faire. Applescript. Mais, pour l’exemple particulier décrit, vous voudrez peut-être examiner la solution attendue.
En quelque sorte, vous voudrez peut-être regarder Shuttle ( http://fitztrev.github.io/shuttle/ ), il s’agit d’un menu contextuel SSH pour OSX.
Je peux me tromper, mais je pense que l’intégration d’Applescript Terminal est un accord ponctuel… C’est-à-dire que chaque appel do script
équivaut à ouvrir une fenêtre de terminal différente, je ne pense donc pas que vous puissiez interagir avec cela.
Vous pouvez copier les clés publiques SSH pour empêcher l'invite du mot de passe, puis exécuter toutes les commandes réunies (warning: la commande suivante est totalement non testée):
tell application "Terminal"
activate
do script "ssh [email protected] '/home/jdoe/dosomestuff.sh && /home/jdoe/dosomemorestuff.sh'"
end tell
Vous pouvez également insérer les commandes ssh et suivantes dans un script Shell à l’aide de Expect , puis appeler ledit script Shell à partir de votre Applescript.
configurez ssh sans mot de passe (ssh-keygen
, puis ajoutez la clé à ~/.ssh/authorized_keys
sur le serveur). Faites une entrée dans ~/.ssh/config
(sur votre bureau), de sorte que lorsque vous exécutez ssh mysqlserver, il apparaisse sur utilisateur @ nomhôte ... ou créez un alias de shell, comme gotosql, qui passe à ssh user@Host -t 'mysql_client ...'
pour démarrer le client mysql de manière interactive .
Ensuite, vous aurez probablement besoin de la réponse de quelqu'un d’autre pour écrire le processus par la suite, car je ne sais pas comment définir les commandes de démarrage de mysql.
Au moins, votre mot de passe SSH reste en dehors du script!
Petruza,
Au lieu d'utiliser la frappe, utilisez le code clé.
L'exemple suivant devrait fonctionner pour vous.
tell application "System Events"
tell application process "Terminal"
set frontmost to true
key code {2, 0, 17, 14}
keystroke return
end tell
end tell
L’exemple ci-dessus envoie les caractères {d a t e} À Terminal, puis
touche retour va entrer et exécuter la commande. Utilisez l'exemple ci-dessus
Avec tous les codes de clé dont vous avez besoin, vous pourrez faire ce que vous essayez de faire.
Le dernier exemple récupère des erreurs sous 10.6.8 (Build 10K549) causées par le mot clé "pause".
Le remplacer par le mot "wait" le fait fonctionner:
tell application "Terminal"
activate
my execCmd("ssh me@localhost", 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
qu'en est-il quelque chose comme ceci:
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
Comme solution soignée, essayez
$ open -a /Applications/Utilities/Terminal.app *.py
ou
$ open -b com.Apple.terminal *.py
Pour le shell lancé, vous pouvez aller dans Préférences> Shell> le configurer pour qu'il quitte si aucune erreur ne se produit.
C'est tout.
J'ai construit ce script. C'est dans Yosemite et c'est un script bash utilisant AppleScript de choisir une liste d'utilisateurs pour les serveurs SSH. En gros, vous définissez une adresse IP, puis les noms d'utilisateur. Lorsque l'application démarre, elle vous demande qui vous souhaitez vous connecter en tant que .. le terminal SSH est lancé et connecté, ce qui entraîne un mot de passe ...
(***
* --- --- --- --- ---
* 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
Je recommande fortement cependant; Nathan Pickmans post ci-dessus à propos de Shuttle ( http://fitztrev.github.io/shuttle/ ) .. une application très intelligente et simple.