Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 23/12/2010, à 18:37

bigibang

Script de connection en SSH PUIS execution de commande.

Bonjour, je viens demander de l'aide à quiconque maîtrise un tant soi peu le bash.

J'ai un iphone (bouuu), que je connecte en ssh, rien de terrible jusqu'ici, et j'ai découvert un paquet cydia, sendsms, qui permet d'envoyer des sms via ssh, plutôt pratique à la maison, mais aussi relou à l'utilisation, pour chaque sms, besoin de se connecter en ssh (donc passwd) puis lancer la commande, en mettant sois même le numero etc, sans oublier les guillemets contenant le texte à envoyer, pas top.

Je voudrais donc faire un script qui me demande :
- le mot de passe ssh (pour l'instant, peut etre enlever le mdp ou bien l'inclure dans le script mais il ne me semble pas que cela soit possible, merci de me contredire).
- le numero (avec certains contacts ajoutés à la main dans le script, je pense pouvoir me démerder pour ça).
- Le texte à envoyer.

Seulement voila, je met mon entête, ma commande de connection ssh (ssh root@<mon ip>) puis pour commencer la commande send sms avec un numero et mon texte (sendsms 06xxxxxxxx "test")

Il m'ouvre un terminal, je rentre le pass ssh, puis, plus rien.

Help ? (Je me doute bien que ce n'est pas bien compliqué mais je ne trouve pas sur internet hmm)

Hors ligne

#2 Le 23/12/2010, à 18:57

bigibang

Re : Script de connection en SSH PUIS execution de commande.

En gros il me faudrait premièrement quelquechose qui ferait le "lien" entre elles deux.
Insérer un programme dans un autre deja lancé.

Hors ligne

#3 Le 23/12/2010, à 19:02

NooP

Re : Script de connection en SSH PUIS execution de commande.

Bonjour,

1) Pour le mot de passe, tu devrais regarder du coté des clés ssh (ssh-keygen, ssh-copy-id). Cela t'éviteras d'avoir à taper un mot de passe, tout en ne créant pas une faille grosse comme ça avec un compte sans mot de passe (Surtout un compte ROOT !!!).

2) Comme ça, ça devrait marcher : ssh root@tonip -c ' sendsms 0612345678 "test" '


Votez Macron, vous l'aurez dans le fion !

Hors ligne

#4 Le 23/12/2010, à 19:15

erpiu

Re : Script de connection en SSH PUIS execution de commande.

Pour mieux comprendre, peux-tu donner une copie de ton script?

Hors ligne

#5 Le 24/12/2010, à 00:10

T10-9D

Re : Script de connection en SSH PUIS execution de commande.

et avec python plutôt qu'un bash ?

#!/usr/bin/python
# -*- coding: iso-8859-1 -*-
#py T10-9D

import pxssh
import os
import getpass

pdw= getpass.getpas("password ssh ? :")
tel=input('N° du destinataire : ' )
mess=input('message :' )   #les guillemets sont implantés, pas besoin d'entourer le message avec

iphone=pxssh.pxssh()
if iphone.login('mon ip', 'root', pdw)==True: #replace <mon ip> par l'ip de ton iphone...
        iphone.sendline('sendsms '+tel+' "'+mess+'"') 
        iphone.prompt()
        iphone.logout()

print "croise les doigts, mais normalement, c'est ok :D"

edit : j'ava oublié une lettre dans le code dsl
edit2 & un " f " en trop( grrrr : ) bon ! normalement c'est bon là!

Dernière modification par T10-9D (Le 24/12/2010, à 00:17)

Hors ligne

#6 Le 28/12/2010, à 18:39

bigibang

Re : Script de connection en SSH PUIS execution de commande.

J'aime bien l'idée du python (langage que je ne connais absolument pas par contre). Le input ne collait pas (je ne pouvais mettre qu'un chiffre, maintenant, avec raw_input c'est bon... pour le début.)
J'ai donc ça :

#!/usr/bin/python
# -*- coding: iso-8859-1 -*-
#py T10-9D

import pxssh
import os
import getpass

pdw=getpass.getpass("password ssh ? :")
tel=raw_input('N° du destinataire : ' )
mess=raw_input('message :' )   #les guillemets sont implantés, pas besoin d'entourer le message avec
iphone=pxssh.pxssh()
if iphone.login('192.168.0.1', 'root', pdw)==True: #replace <mon ip> par l'ip de ton iphone...
        iphone.sendline('sendsms '+tel+' "'+mess+'"') 
        iphone.prompt()
        iphone.logout()

print "croise les doigts, mais normalement, c'est ok :D"    

Je rentre les 3 données, puis il me répond ça :

Traceback (most recent call last):
  File "/home/nicolas/Bureau/sendsms test2", line 13, in <module>
    if iphone.login('192.168.0.1', 'root', pdw)==True: #replace <mon ip> par l'ip de ton iphone...
  File "/usr/lib/python2.6/dist-packages/pxssh.py", line 243, in login
    if not self.synch_original_prompt():
  File "/usr/lib/python2.6/dist-packages/pxssh.py", line 134, in synch_original_prompt
    self.read_nonblocking(size=10000,timeout=1) # GAS: Clear out the cache before getting the prompt
  File "/usr/lib/python2.6/dist-packages/pexpect.py", line 824, in read_nonblocking
    raise TIMEOUT ('Timeout exceeded in read_nonblocking().')
pexpect.TIMEOUT: Timeout exceeded in read_nonblocking().

(Désolé pour le délai, mais santa n'attends pas.)

Hors ligne

#7 Le 28/12/2010, à 22:42

T10-9D

Re : Script de connection en SSH PUIS execution de commande.

essais de faire un essais ligne par ligne.

ouvre un terminal et

$python

puis entre ligne par ligne ton programe

>>> import pxssh
>>> import getpass
>>> import os
>>> pdw=getpass.getpass("password ssh ? :")              #après validation il te demande de rentrer ton passe

>>> tel=raw_input("N° du destinataire : " )                 #saisie le tel 06********  

>>> mess=raw_input("message :" )                             #saisie le texto

>>> iphone=pxssh.pxssh()
>>> iphone.login('192.168.0.1','root',pdw)                   #j'ai retirer le if / j'ava oublié le 'else' après de toute manière
>>> iphone.sendline('sendsms '+tel+' "'+mess+'"')        #après cette commande la console devrait afficher des chiffres
>>> iphone.prompt()
>>> print iphone.before                #après cette cmd la console devrait afficher le text habituelle après l'envois d'un message

>>>  iphone.logout()  #quit le serveur ssh

on cernera mieux le problème de cette manière.

au cas ou voila le "man" du module pxssh (http://pexpect.sourceforge.net/pxssh.html )

ps : sur ton log on dirait qu'il y a un pb sur la commande d'identification(ligne13, les autres erreurs découlent de cette première), pourtant la syntaxe est bonne.

Hors ligne

#8 Le 29/12/2010, à 00:37

bigibang

Re : Script de connection en SSH PUIS execution de commande.

À la ligne 13 c'était les ":" qui posaient problèmes (enfin je suppose... je les ais enlevés et ça marche).

Maintenant, ligne par ligne, tout roule jusque

>>> iphone.login('192.168.0.1','root',pdw)
Ou j'obtiens un :

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.6/dist-packages/pxssh.py", line 192, in login
    i = self.expect(["(?i)are you sure you want to continue connecting", original_prompt, "(?i)(?:password)|(?:passphrase for key)", "(?i)permission denied", "(?i)terminal type", TIMEOUT, "(?i)connection closed by remote host"], timeout=login_timeout)
  File "/usr/lib/python2.6/dist-packages/pexpect.py", line 1311, in expect
    return self.expect_list(compiled_pattern_list, timeout, searchwindowsize)
  File "/usr/lib/python2.6/dist-packages/pexpect.py", line 1325, in expect_list
    return self.expect_loop(searcher_re(pattern_list), timeout, searchwindowsize)
  File "/usr/lib/python2.6/dist-packages/pexpect.py", line 1396, in expect_loop
    raise EOF (str(e) + '\n' + str(self))
pexpect.EOF: End Of File (EOF) in read_nonblocking(). Exception style platform.
<pxssh.pxssh object at 0xb75c0c0c>
version: 2.3 ($Revision: 399 $)
command: /usr/bin/ssh
args: ['/usr/bin/ssh', '-q', '-l', 'root', '192.168.0.1']
searcher: searcher_re:
    0: re.compile("(?i)are you sure you want to continue connecting")
    1: re.compile("[#$]")
    2: re.compile("(?i)(?:password)|(?:passphrase for key)")
    3: re.compile("(?i)permission denied")
    4: re.compile("(?i)terminal type")
    5: TIMEOUT
    6: re.compile("(?i)connection closed by remote host")
buffer (last 100 chars): 
before (last 100 chars): 
after: <class 'pexpect.EOF'>
match: None
match_index: None
exitstatus: None
flag_eof: True
pid: 2740
child_fd: 3
closed: False
timeout: 30
delimiter: <class 'pexpect.EOF'>
logfile: None
logfile_read: None
logfile_send: None
maxread: 2000
ignorecase: False
searchwindowsize: None
delaybeforesend: 0.05
delayafterclose: 0.1
delayafterterminate: 0.1

Hors ligne

#9 Le 29/12/2010, à 00:38

bigibang

Re : Script de connection en SSH PUIS execution de commande.

(Bon j'en ai déduis qu'il n'arrivais pas à se connecter en ssh mais pourquoi ?? Tout roule via ssh root@192.168.0.1 hmm )

Hors ligne

#10 Le 29/12/2010, à 14:19

redo_fr

Re : Script de connection en SSH PUIS execution de commande.

Salut,

il y a plus simple smile

1*/ Crées une paire de clefs SSH
Entre une "passphrase" vide

ssh-keygen -t dsa -f ~/.ssh/id_dsa_send


2*/ Complète ton fichier authorized_keys sur le compte receveur

cat id_dsa_send.pub >> ~/.ssh/authorized_keys

3*/ Ouvre le authorized_keys et ajoute en début de ligne

command="<path/to/sendsms> $SSH_ORIGINAL_COMMAND" <la clef ssh>

4*/ Pour envoyer un sms

ssh -i ~/.ssh/id_dsa_send <user>@<machine> "0612345890" "message"

5*/ TADAAA !

smile

Dernière modification par redo_fr (Le 29/12/2010, à 14:20)


Il n'y a pas de mauvais outils, il n'y a que de mauvais ouvriers
- papy -
Personnellement, je crois que faire des procès est un signe que les affaires vont mal. Je ne dis pas que Microsoft va mal, ce n'est qu'un signe, pas un indicateur...
- Linus Torvalds -

Hors ligne

#11 Le 29/12/2010, à 14:47

T10-9D

Re : Script de connection en SSH PUIS execution de commande.

on va faire un autre essais ligne par ligne en python.

>>> import pexpect

>>> p=pexpect.spawn('ssh root@192.168.0.1')

>>> p.expect(root@192.168.0.1's password: ")  #vérification de la pass phrase / si elle n'est pas identique a celle là. fait en modification

>>> p.sendline('mdp')        #remplace mdp par ton mot de pass et laisse bien les guillemets

>>> p.sendline(' sendsms 0612345678 "test" ')   #fais les modifs qui s'imposent dans la commande "sendsms"

>>> p.sendline('logout')     #pour quitter le serveur ssh

ps :

bigibang a écrit :

À la ligne 13 c'était les ":" qui posaient problèmes

les ":" sont nécessaire en fin de ligne si on utilise les instruction 'If","else","for" etc...

Redo_fr a écrit :

il y a plus simple smile

effectivement big_smile

Hors ligne

#12 Le 30/12/2010, à 03:13

bigibang

Re : Script de connection en SSH PUIS execution de commande.

Bon, certains diront que c'est de l'acharnement mais je préfere toujours le python (d'autant que je sens qu'on touche le but).

import pexpect

i=pexpect.spawn('ssh root@192.168.0.1')
i.sendline('alpine')
i.sendline(' sendsms 06xxxxxxxx "test11"')
i.sendline('logout')

Ligne par ligne marche parfaitement tandis que dans un fichier je ne reçois rien, j'ai essayé un time.sleep(10) à la fin au cas ou la ligne n'avait pas eu le temps d'etre envoyée mais ça ne marche pas.

Hors ligne

#13 Le 30/12/2010, à 15:17

T10-9D

Re : Script de connection en SSH PUIS execution de commande.

si en ligne par ligne avec "expert" tu parviens à quelque chose, c'est au le module "pxshh" ne gère pas ta passphrase de iphone.

et il faudrait editer le pxssh.py pour lui ajouter la passphrass  (probablement sur la ligne 192. mais je craint que ce ne soit pas la seul ligne).

pour continuer sur expert. il faut en effet jouer avec des temps de pause. Mais pas uniquement en fin de programme.
cependant. ces temps de pause devront être variable (en fonction des temps de réponse) et il faudrait gérer le timeout pour avoir un fonctionnement fiable.

tu peux cependant faire un essais avec un truc du genre. (il se peut que les "timeout" et les "temps de réponse" pause posent problème)

#!/usr/bin/env python

import pexpert ,time


i=pexpect.spawn('ssh root@192.168.0.1')

# time.sleep(5)
#i.expect("pass-phrase ")

time.sleep(5)
i.sendline('alpine')
time.sleep(5)
i.sendline(' sendsms 06xxxxxxxx "test11"')
time.sleep(5)
i.sendline('logout')

Hors ligne

#14 Le 01/01/2011, à 21:05

bigibang

Re : Script de connection en SSH PUIS execution de commande.

Naon, la commande expect ne fonctionne pas hmm

Hors ligne

#15 Le 01/01/2011, à 23:54

T10-9D

Re : Script de connection en SSH PUIS execution de commande.

Bon! je ne vois quelqu'une seule solution.
Avec un bon marteau, un tourne vis et du ruban adhésif.
point le tourne vis sur la tranche de ton iphone... avec le marteau....puis tu enroules avec l'adhésif.

A moins que. L'on ne réinvente pas le fil à couper le beurre et que tu utilises cette technique big_smile

la solution en python qui fonction bien

Allez, bonne année. et bon sendSMS.

Hors ligne