PDA

Visualizza la versione completa : Script Shell


Acciues
11-10-2010, 19:50
Cioa ragazzi, oggi mi sono imbattuto nel problema seguente: ho installato un server SSH servendomi si Cygwin su un pc che uso come server. A questo punto instauro connessioni SSH (con crittografia asimmetrica) da Mac e da Linux tranquillamente. Vorrei però servirmi di uno script che esegua le operazioni seguenti:

1 - scp file.pdf AgostinoPolizzano@192.168.1.100:./ #INVIO UN FILE

2 - ssh AgostinoPolizzano@192.168.1.100 #APRO LA CONNESSIONE SSH

3 - cmd #AVVIO IL TERMINALE SU WIN - diciamo che lo uso per lanciare il comando successivo

4 - start C:\"Program Files"\Adobe\"Reader 9.0"\Reader\AcroRd32.exe /p /h file.pdf #STAMPO IL FILE SULLA STAMPANTE COLLEGATA AL SERVER

la mia domanda è questa: come faccio a creare uno script, o un programma in C++ o qualsiasi cosa che esegua il terzo e il quarto comando all'interno della sessione SSH? Se, ad esempio, mi servo di un programma scritto in C++ ed uso la funzione system("comando") ciascun comando di ciascuna chiamata alla funzione system è come se fosse a se stante, ovvero ciascuna in una diversa sessione del terminale.

Come posso rimediare??

Grazie a tutti.
www.agostinopolizzano.info

cacao74
11-10-2010, 23:36
dovresti aggiungere al lancio di SSH il comando da eseguire sul server remoto (nel tuo caso windows).
ti faccio vedere un esempio tra due macchine linux:


[cacao74@tweety ~]$ ssh -l cacao74 slack64 "/sbin/ifconfig lo"
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:19254 errors:0 dropped:0 overruns:0 frame:0
TX packets:19254 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:3795710 (3.6 MiB) TX bytes:3795710 (3.6 MiB)

se avro' tra le mani una macchine windows con ssh server, ti faro' sapere.
per ora, prova tu e comunica eventuali successi

Acciues
12-10-2010, 02:16
Ciao e anzitutto grazie per la risposta!!
La soluzione che proponi l'avevo già provata ma non c'è stato verso di funzionare!! Il problema è imputabile sicuramente anche a cygwin che comunque emula un ambiente UNIX su Win che funziona bene per quanto riguarda la gestione di file e cartelle ma più complicata è la situazione se si vogliono eseguire programmi sul server remoto (in sostanza i comandi devono necessariamente essere invocati in questa sequenza!!)

Comunque credo che il mio problema possa essere affrontato più in generale estraniandosi dalla connessione ssh.

Provo a spiegarmi con un esempio:
Supponiamo che io intenda scrivere un programma in C++ nel quale mi servo della funzione system("comando") per eseguire un comando;
supponiamo inoltre che il comando da eseguire sia il seguente: ~/Agostino/programmi/prova.

Se invoco tale funzione:


system("~/Agostino/programmi/prova")

tutto procede bene ma, se io separo il comando nel seguente modo:


system("cd ~/Agostino/programmi/");
system("./prova");

il programma "prova" non viene più eseguito in quanto il secondo comando è distinto dal primo e, pertanto, è come se si avviasse una nuova sessione del terminale che non tiene conto del comando precedente!

Se riuscissi a risolvere questo problema credo di riuscire a risolvere anche il problema reale, ovvero quello che riguarda la connessione ssh.

Spero di essere stato esaustivo!!

Ti ringrazio ancora per la tua disponibilità!!

sacarde
12-10-2010, 17:19
e questo?


ssh -l cacao74 slack64 "system("~/Agostino/programmi/prova")"



p.s.
l'hai valorizzata il parametro :

PermitLocalCommand

in ssh_config ?

Acciues
12-10-2010, 19:43
sarcade, scusami, ma non ti capisco!!!

sacarde
12-10-2010, 20:08
come dice cacao, aggiungi il comando sulla riga di ssh


ssh -l cacao74 slack64 ".............."

cacao74
12-10-2010, 23:49
Originariamente inviato da sacarde
come dice cacao, aggiungi il comando sulla riga di ssh


ssh -l cacao74 slack64 ".............."

system, se non ricordo male, e' una chiamata del C++
e quanto suggerisci (credo) non porterebbe da nessuna parte.


@Acciues
non ho capito ancora se hai provato:
<SSH> "C:\Program\ Files\Adobe\Reader 9.0\Reader\AcroRd32.exe /p /h file.pdf"
oppure
<SSH> "cd c:\percorso; comando opzioni file.pdf"

non ho un windows su cui provare al momento...

Acciues
13-10-2010, 01:49
Originariamente inviato da cacao74
system, se non ricordo male, e' una chiamata del C++
e quanto suggerisci (credo) non porterebbe da nessuna parte.


@Acciues
non ho capito ancora se hai provato:
<SSH> "C:\Program\ Files\Adobe\Reader 9.0\Reader\AcroRd32.exe /p /h file.pdf"
oppure
<SSH> "cd c:\percorso; comando opzioni file.pdf"

non ho un windows su cui provare al momento...

ho provato la prima!!! Comunque ho risolto tutto con un programma c++!!!
Posto una parte del codice, quella relativa a quanto detto...


path_file = "cp "+path_file+" ~/temp_print/file.pdf";
system("mkdir ~/temp_print/");
command = new char [path_file.size()+1];
strcpy (command, path_file.c_str());
system(command);
system("cd ~/temp_print/; scp file.pdf AgostinoPolizzano@192.168.1.100:./; echo 'start C:\\Programmi\\Adobe\\Reader\\Reader\\AcroRd32.exe /p /h file.pdf' | ssh -t AgostinoPolizzano@192.168.1.100 cmd; ssh -n AgostinoPolizzano@192.168.1.100");
system("rm -rf ~/temp_print");


Agostino Polizzano (http://www.agostinopolizzano.info)

Loading