Como ativar o script no laptop do smartphone?

3

Eu quero executar um script do Linux no meu laptop remotamente do meu smartphone (iPhone, a saber). Para simplificar, digamos que o script seja chamado de myscript.sh e esteja localizado em /root/Desktop . Estou correndo como usuário root (Sim, eu sei o que estou fazendo rodando como root).

A partir das informações que reuni, estas são as soluções possíveis:
1. Escreva algum tipo de aplicativo para o iPhone se comunicar (Parece trabalhoso e complexo demais para mim.)
2. Enviando e-mails e usando a coisa "Procmail"
3. Enviando e-mails e usando a coisa "Postfix"

Todos os métodos mencionados acima são bastante desconhecidos para mim; Eu não ouvi falar deles até recentemente. Então alguém pode por favor me esclarecer sobre qualquer método que me permita executar um linux do meu laptop do meu smartphone.

Obrigado!

EDIT: By the way, eu não tenho servidores rodando em casa.

    
por krismath 09.08.2014 / 17:48

3 respostas

2

Opção 1: SSH + ngrok

  1. Eu acredito que o servidor SSH que escuta em 22 portas vem por padrão no Ubuntu.
  2. Instale o ngrok com sudo apt-get install ngrok-client
  3. Inscreva-se em ngrok.com para obter um token de autenticação (necessário para usar protocolos não-http).
  4. Deixe o ngrok local saber sobre sua conta echo 'auth_token: YOUR_AUTH_TOKEN' > ~/.ngrok
  5. Executar ngrok -proto=tcp 22

Você receberá algo como

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 é o seu servidor SSH local acessível de qualquer lugar. Por padrão, a porta é dada aleatoriamente, mas você pode configurá-la no arquivo de configuração. Consulte docs para mais informações.

Teste com ssh ngrok.com -p 52418 . Você pode se conectar a ele de qualquer cliente SSH do seu smartphone (estou usando o VX ConnectBot ) e fazer tudo o que você pode fazer com a linha de comando no seu computador local, como executar scripts:]

Opção 2: servidor HTTP simples + ngrok

Para um exemplo simplificado, criarei dois arquivos em ~/test/ :

  • test.sh , que exibirá o registro de data e hora atual e o anexará a log.txt :

    #! /bin/sh
    date +%s
    date +%s >> log.txt
    
  • server.py , que aguardará solicitação HTTP remota e executará 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')
    

Agora, podemos executar server.py executável, executá-lo e, em seguida, abrir http://127.0.0.1:8000 em um navegador e ver se o script realmente funcionou - ele exibirá o registro de data e hora atual em nossa janela do navegador + anexá-lo a ~/test/log.txt .

Mas 127.0.0.1 é apenas localhost e queremos acessar nosso servidor da Internet. É aí que entra o ngrok . Instale-o com sudo apt-get install ngrok-client e execute ngrok 8000 , ele lhe dará algo como:

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

Esse https://a1b2c3d4.ngrok.com é o endereço público (ou seja, acessível pela Internet) que será realmente servido pelo seu servidor local (que executará o seu script, como você se lembra :)). Por padrão, o nome do subdomínio é dado aleatoriamente, mas você pode configurá-lo no arquivo de configuração. Consulte docs para mais informações.

Você pode executar o seu servidor e o ngrok em segundo plano, mas isso é outra história:]

Opção 3: TeamViewer (ou VNC + ngrok)

Você pode até ter controle remoto gráfico completo com o host TeamViewer em seu laptop e o aplicativo cliente TeamViewer em seu smartphone. Fácil, mas pode consumir muito tráfego para uso móvel.

Em vez do TeamViewer, você provavelmente poderia usar o servidor VNC + ngrok em seu laptop e o cliente VNC em seu smartphone.

    
por Shevchuk 09.08.2014 / 22:28
0

Embora não seja de maneira alguma a maneira mais rápida ou avançada de responder à sua pergunta, acho que é provavelmente o mais fácil de implementar e entender.

O método que geralmente uso é configurar uma conta de e-mail fictícia e consultá-la para novos e-mails a cada segundo. Isso geralmente leva cerca de 5 a 10 segundos a partir do momento em que você enviou o e-mail no telefone e até que o script seja executado. Observe que você precisa ativar o imap no endereço de e-mail que você criou.

Verifique também se o seu script bash começa com a linha:

#!/usr/bin/env bash

O script python que eu uso é mostrado abaixo. É claro que você precisa inserir as informações relevantes nas primeiras quatro variáveis em maiúsculas. Abra um editor de texto e salve o seguinte como 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 __name__ == "__main__":
    main()

Você pode executá-lo com:

python email-run.py

    
por TheSchwa 09.08.2014 / 20:40
0

Dê uma olhada no Pushbullet . Do seu smartphone, envie uma mensagem (um "push") para o seu PC. Um simples dbus listener é executado no seu PC e executa o script quando o push é recebido. Existe um Ubuntu AppIndicator que permite que você escute pushes sem um navegador. Consulte aqui .

    
por Jos 09.08.2014 / 23:26