Wysyłanie poleceń i ciągów do terminala.aplikacja z Applescript

Chcę zrobić coś takiego:

tell application "Terminal"
  activate
  do script "ssh [email protected]"
  -- // write user's password
  -- // write some linux commands to remote server
end tell

Na przykład, aby zalogować się na serwer, wprowadź hasło, a następnie zaloguj się do mysql i wybierz DB.
Wpisuję to codziennie i byłoby naprawdę pomocne połączyć to w skrypt.

Również, czy istnieje odniesienie do Jakie polecenia, Właściwości, funkcje, itp. czy aplikacje (Terminal, Finder, itp.) są dostępne do użycia w Applescript? dzięki!

EDIT : wyjaśnię to: I don ' t want to do kilka "zrobić skrypt" jak próbowałem i nie działa. Chcę otworzyć okno terminala, a następnie emulować ludzkie wpisywanie niektórych znaków i naciśnięcie enter. Mogą to być hasła, mogą to być polecenia, cokolwiek, wysyłanie znaków do terminala, na którym działa ssh. Próbowałem nacisnąć klawisz i nie działa.

Author: Petruza, 2009-12-09

15 answers

Najpierw połącz się z serwerem i odczekaj 6 sekund (możesz to zmienić), a następnie wykonaj wszystko, czego potrzebujesz na zdalnym serwerze za pomocą tej samej zakładki

tell application "Terminal"
   set currentTab to do script ("ssh user@server;")
   delay 6
   do script ("do something remote") in currentTab
end tell
 49
Author: CRP,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-01 08:08:06

Jak stwierdził EvanK, każda linia skryptu do otworzy nowe okno, jednak można uruchomić
dwa polecenia z tym samym skryptem do, oddzielając je średnikiem. Na przykład:

tell application "Terminal"
    do script "date;time"
end tell

Ale limit wydaje się być dwa polecenia.

Możesz jednak dodać "w oknie 1" do polecenia do script (dla każdego skryptu do po pierwszym), aby uzyskać ten sam efekt i kontynuować uruchamianie tylu poleceń, ile potrzebujesz w tym samym okno:

tell application "Terminal"
    do script "date"
    do script "time" in window 1
    do script "who" in window 1
end tell


zauważ, że właśnie użyłem polecenia who, date I time jako przykładu...zastąp z dowolnymi poleceniami.

 13
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-10 04:35:40

Jest inny sposób, ale z tą zaletą, że uruchamia Terminal, przenosi go na przód i tworzy tylko jedno okno.

Lubię to, gdy chcę być zgrabnie przedstawiony z wynikami mojego scenariusza.

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
 10
Author: Ze'ev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-15 22:04:35

Co ty na to? Nie ma potrzeby stosowania kodów klawiszy (przynajmniej w Lionie, Nie wiem co wcześniej), a podprogram upraszcza skrypt główny.

Poniższy skrypt spowoduje SSH do localhost jako użytkownik "me", wprowadź hasło "myPassw0rd" po 1 sekundzie opóźnienia, wydaj ls, opóźnij 2 sekundy, a następnie zakończ.

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
 8
Author: Allen Robel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-06 09:02:55

Nie musisz "mówić" Terminalowi, żeby cokolwiek zrobił. AppleScript może wykonywać skrypty powłoki bezpośrednio.

set theDir to "~/Desktop/"
do shell script "touch " & theDir &"SomeFile.txt"
Albo cokolwiek ...
 5
Author: user1984702,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-16 18:07:10

Twoje pytanie dotyczy w szczególności tego, jak sprawić, by Applescript robił to, co chcesz. Ale dla konkretnego przykładu opisanego, możesz chcieć przyjrzeć się "oczekiwaniu" jako rozwiązaniu.

 2
Author: pizzaFace,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-16 20:33:49

Dlaczego nie używać expect:

tell application "Terminal"
    activate
    set currentTab to do script ("expect -c 'spawn ssh user@IP; expect \"*?assword:*\"; send \"MySecretPass
\"; interact'")
end tell
 2
Author: K. Biermann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-28 14:53:31

Trochę pokrewne, warto zajrzeć do Shuttle ( http://fitztrev.github.io/shuttle/), jest to menu skrótów SSH dla OSX.

 2
Author: Nathan Pitman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-13 22:14:49

Mogę się mylić, ale myślę, że integracja terminala Applescript to jednorazowa transakcja...Oznacza to, że każde wywołanie do script jest jak otwarcie innego okna terminala, więc nie sądzę, że można z nim w ogóle wchodzić w interakcję.

Możesz skopiować klucze publiczne SSH, aby zapobiec monitowi o hasło, a następnie wykonać wszystkie połączone ze sobą polecenia ( Ostrzeżenie: poniższe polecenia są całkowicie niesprawdzone):

tell application "Terminal"
    activate
    do script "ssh [email protected] '/home/jdoe/dosomestuff.sh && /home/jdoe/dosomemorestuff.sh'"
end tell

Alternatywnie, można zawinąć ssh i kolejne polecenia w skrypcie powłoki używając Expect , a następnie wywołaj skrypt powłoki z twojego Applescriptu.

 1
Author: EvanK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-08 22:35:04

Skonfiguruj ssh bez hasła (ssh-keygen, a następnie dodaj klucz do ~/.ssh/authorized_keys na serwerze). Zrób wpis w ~/.ssh/config (na Twoim pulpicie), tak aby po uruchomieniu serwera SSH mysqlserver trafił on na user@hostname... Można też utworzyć alias powłoki, taki jak gotosql, który rozszerza się do ssh user@host -t 'mysql_client ...', aby interaktywnie uruchomić klienta mysql na serwerze.

Wtedy prawdopodobnie potrzebujesz odpowiedzi kogoś innego, aby skrypt procesu po tym, ponieważ Nie wiem, jak ustawić komendy startowe dla mysql.

Przynajmniej to utrzymuje twój ssh hasło ze skryptu!

 1
Author: Peter Cordes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-08 23:56:54

Petruza,

Zamiast naciśnięcia klawisza użyj kodu klucza.
Poniższy przykład powinien działać dla Ciebie.

tell application "System Events"
    tell application process "Terminal"
        set frontmost to true
        key code {2, 0, 17, 14}
        keystroke return
    end tell
end tell

Powyższy przykład wyśle znaki {d A t e} do terminala, a następnie
klawisz return wejdzie i uruchomi dowództwo. Użyj powyższego przykładu
z dowolnymi kluczowymi kodami, których potrzebujesz i będziesz w stanie zrobić to, co próbujesz zrobić.

 1
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-10 04:34:00

Ostatni przykład pobiera błędy pod 10.6.8 (Build 10k549) spowodowane przez słowo kluczowe "pauza".

Zastąpienie go słowem "wait" sprawia, że działa:

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
 1
Author: user1019711,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-16 09:10:38

A może coś takiego:

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
 0
Author: joey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-11 06:41:47

Jako schludne rozwiązanie, spróbuj -

$ open -a /Applications/Utilities/Terminal.app  *.py

Lub

$ open -b com.apple.terminal *.py

Dla uruchomionej powłoki, możesz przejść do Preferencje > powłoka > ustaw ją na zakończoną, jeśli nie ma błędu.

To wszystko.
 0
Author: Mohammad Shahid Siddiqui,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-20 04:53:27

Zbudowałem ten skrypt. Jest w Yosemite i jest to skrypt bash za pomocą AppleScript, aby wybrać listę użytkowników dla serwerów SSH. Zasadniczo definiujesz adres IP, a następnie nazwy użytkowników.. po uruchomieniu aplikacji pyta, kogo chcesz się zalogować.. terminal SSH zostanie uruchomiony i zalogowany z monitem o hasło...

(***
 * --- --- --- --- ---
 * 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

Gorąco jednak polecam; Nathan Pickmans post powyżej o Shuttle ( http://fitztrev.github.io/shuttle / ) .. bardzo inteligentny i prosty podanie.

 0
Author: TheBlackBenzKid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-13 10:31:35