web-dev-qa-db-fra.com

Comment activer le script sur un ordinateur portable depuis un smartphone?

Je veux exécuter un script linux sur mon ordinateur portable à distance depuis mon smartphone (iPhone, à savoir). Pour plus de simplicité, supposons que le script s'appelle myscript.sh et qu'il se trouve dans /root/Desktop. Je cours en tant qu'utilisateur root (ouais, je sais ce que je fais en cours d'exécution en tant que root.)

D'après les informations que j'ai recueillies, voici les solutions possibles:
1. Ecrivez une sorte d'application pour iPhone pour communiquer (Cela semble trop complexe et trop complexe pour moi.)
2. Envoi d'e-mails et utilisation de "Procmail"
3. Envoi d'emails et utilisation de "Postfix"

Toutes les méthodes mentionnées ci-dessus me sont plutôt inconnues; Je n'ai entendu parler d'eux que récemment. Quelqu'un peut-il m'éclairer sur N'IMPORTE QUELLE méthode qui me permet d'exécuter un linux de mon ordinateur portable à partir de mon smartphone.

Je vous remercie!

EDIT: Au fait, je n’ai pas de serveur à la maison.

3
krismath

Option 1: SSH + ngrok

  1. Je crois que le serveur SSH en écoute sur le port 22 vient par défaut sur Ubuntu.
  2. Installez ngrok avec Sudo apt-get install ngrok-client
  3. Inscrivez-vous sur ngrok.com pour obtenir un jeton d'authentification (nécessaire pour utiliser des protocoles non-http).
  4. Informez ngrok de votre compte echo 'auth_token: YOUR_AUTH_TOKEN' > ~/.ngrok
  5. Exécuter ngrok -proto=tcp 22

Vous obtiendrez quelque chose comme

Tunnel Status                 online
Version                       1.6/1.6
Forwarding                    tcp://ngrok.com:52418 -> 127.0.0.1:22
Web Interface                 127.0.0.1:4040
# Conn                        0
Avg Conn Time                 0.00ms

ngrok.com:52418 est votre serveur SSH local accessible de n’importe où. Par défaut, le port est donné au hasard, mais vous pouvez le définir dans un fichier de configuration. Voir docs pour plus d'informations.

Testez-le avec ssh ngrok.com -p 52418. Vous pouvez vous y connecter depuis n'importe quel client SSH depuis votre smartphone (j'utilise VX ConnectBot ) et faire tout ce que vous pouvez faire avec la ligne de commande sur votre ordinateur local, comme l'exécution de scripts:]

Option 2: serveur HTTP simple + ngrok

Pour un exemple simplifié, je créerai deux fichiers dans ~/test/:

  • test.sh, qui générera l'horodatage actuel et l'ajoutera à log.txt:

    #! /bin/sh
    date +%s
    date +%s >> log.txt
    
  • server.py, qui attend la requête HTTP distante et exécute test.sh:

    #!/usr/bin/env python3
    import http.server, os, subprocess
    
    class HTTPRequestHandler(http.server.BaseHTTPRequestHandler):
        def do_GET(self):
    
            path = 'test.sh'
    
            # Make path absolute
            if path[0] != '/':
                path = os.getcwd() + '/' + path
    
            # If file exists, execute it and return output
            if os.path.isfile(path):
                if os.access(path, os.X_OK):
                    p = subprocess.Popen(path, Shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
                    stdout, stderr = p.communicate()
                    content = stdout.decode('UTF-8')
                else:
                    content = path + ' is not executable'
    
                self.send_response(200)
                self.send_header('Content-type', 'text/html')
                self.end_headers()
                self.wfile.write(content.encode('UTF-8'))
    
            else:
                self.send_header('Content-type', 'text/html')
                self.send_response(404, 'File Not Found')
                self.end_headers()
    
    PORT = 8000
    handler_class = HTTPRequestHandler
    httpd = http.server.HTTPServer(('', PORT), handler_class)
    
    print('Listening at port', PORT)
    
    try:
        httpd.serve_forever()
    except KeyboardInterrupt:
        pass
    
    httpd.server_close()
    print('Server stopped')
    

Maintenant, nous pouvons créer server.py exécutable, l'exécuter, puis ouvrir http://127.0.0.1:8000 dans un navigateur et voir que le script a réellement fonctionné - il affichera l'horodatage actuel dans notre fenêtre de navigateur + l'ajoutera à ~/test/log.txt.

Mais 127.0.0.1 n'est que localhost, et nous voulons accéder à notre serveur depuis Internet. C'est là que ngrok entre. Installez-le avec Sudo apt-get install ngrok-client et exécutez ngrok 8000, il vous donnera quelque chose comme:

Tunnel Status                 online
Version                       1.6/1.6
Forwarding                    http://a1b2c3d4.ngrok.com -> 127.0.0.1:8000
Forwarding                    https://a1b2c3d4.ngrok.com -> 127.0.0.1:8000
Web Interface                 127.0.0.1:4040
# Conn                        0
Avg Conn Time                 0.00ms

Ce https://a1b2c3d4.ngrok.com est une adresse publique (c’est-à-dire accessible depuis Internet) qui sera effectivement servie par votre serveur local (qui exécutera votre script, si vous vous en souvenez :)). Par défaut, le nom du sous-domaine est donné au hasard, mais vous pouvez le définir dans un fichier de configuration. Voir docs pour plus d'informations.

Vous pouvez exécuter votre serveur et ngrok en arrière-plan, mais ceci est une autre histoire:]

Option 3: TeamViewer (ou VNC + ngrok)

Vous pouvez même avoir un contrôle à distance graphique complet avec TeamViewer Host sur votre ordinateur portable et l'application client TeamViewer sur votre smartphone. Facile, mais pourrait être trop consommateur de trafic pour une utilisation mobile.

Au lieu de TeamViewer, vous pourriez probablement utiliser VNC server + ngrok sur votre ordinateur portable et le client VNC sur votre smartphone.

2
Shevchuk

Bien que ce ne soit en aucun cas le moyen le plus rapide ni le plus avancé de répondre à votre question, je pense que c'est probablement le plus facile à mettre en œuvre et à comprendre.

La méthode que j'utilise habituellement consiste à configurer un compte de messagerie factice et à l'interroger à chaque seconde pour obtenir de nouveaux courriers électroniques. Cela prend généralement environ 5 à 10 secondes entre l'envoi du courrier électronique sur votre téléphone et l'exécution du script. Notez que vous devez activer imap dans l'adresse électronique que vous avez créée.

Assurez-vous également que votre script bash commence par la ligne:

#!/usr/bin/env bash

Le script python que j'utilise est présenté ci-dessous. Bien sûr, vous devez entrer les informations pertinentes dans les quatre premières variables majuscules. Ouvrez un éditeur de texte et enregistrez ce qui suit sous le nom email-run.py:

#!/usr/bin/env python

import imaplib,time,serial,subprocess

IMAP_SERVER = 'imap.gmail.com'
USERNAME = 'username'
PASSWORD = 'password'
PATH_TO_SCRIPT = '/root/Desktop/myscript.sh'
EXECUTE_IF_EMAIL_HAS = 'run'

def main():

    imap_conn = imaplib.IMAP4_SSL(IMAP_SERVER)
    imap_conn.login(USERNAME,PASSWORD)
    imap_conn.select()

    while(True):
        text = get_new_body(imap_conn)
        if text is not None:
            if EXECUTE_IF_EMAIL_HAS.lower() in text.lower():
                subprocess.call(PATH_TO_SCRIPT)
            imap_conn.store(1,'+FLAGS','\\Deleted')
            imap_conn.expunge()
        time.sleep(1)

def get_new_body(imap_conn):

    imap_conn.recent()
    (typ, data) = imap_conn.search(None, 'ALL')
    if data[0] == '':
        return None
    (typ, data) = imap_conn.fetch(1,'(RFC822)')
    msg = data[0][1].split('\r\n\r\n')

    index = 0
    while(True):
        if "text/plain" in msg[index]:
            break
        index += 1

    return msg[index+1]

if __== "__main__":
    main()

Vous pouvez le lancer avec:

python email-run.py

0
TheSchwa

Jetez un oeil à Pushbullet . Depuis votre smartphone, envoyez un message ("Push") à votre PC. Un simple écouteur dbus s'exécute sur votre PC et exécute le script lorsque le Push est reçu. Il existe un AppIndicator Ubuntu qui vous permet d'écouter les envois sans navigateur. Voir ici .

0
Jos