Как активировать сценарий на ноутбуке со смартфона?

Я хочу запустить скрипт Linux на своем ноутбуке удаленно с моего смартфона (iPhone, а именно). Для простоты скажем, называют сценарий myscript.sh и это расположено в /root/Desktop. Я работаю как пользователь root (Да, я знаю то, что я делаю выполнение как корень.)

От информации я имею, заключают, что это возможные решения:
1. Запишите своего рода приложение для iPhone для передачи (Звуки, кропотливые и слишком сложные для меня.)
2. Отправка электронных писем и использование вещи "Procmail"
3. Отправка электронных писем и использование "Постфиксной" вещи

Все упомянутые выше методы довольно неизвестны мне; я не услышал о них до недавнего времени. Так может кто-либо просвещать меня на ЛЮБОМ методе, которые позволяют мне запускать Linux своего ноутбука с моего смартфона.

Спасибо!

Править: Между прочим, у меня нет серверов, работающих дома.

3
задан 10 August 2014 в 06:05

3 ответа

Опция 1: SSH + ngrok

  1. Я полагаю, что сервер SSH, слушающий на 22 портах, прибывает по умолчанию в Ubuntu.
  2. Установите ngrok с sudo apt-get install ngrok-client
  3. Подпишитесь на ngrok.com для получения, подлинный маркер (должен был использовать non-http протоколы).
  4. Сообщите локальному ngrok о своей учетной записи echo 'auth_token: YOUR_AUTH_TOKEN' > ~/.ngrok
  5. Выполненный ngrok -proto=tcp 22

Вы получите что-то как

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 Ваш локальный сервер SSH, доступный отовсюду. Портом по умолчанию дан наугад, но можно установить его в файле конфигурации. См. документы для большего количества информации.

Протестируйте его с ssh ngrok.com -p 52418. Можно соединиться с ним от любого клиента SSH со смартфона (я использую VX ConnectBot), и сделайте все, что можно сделать с командной строкой на локальном компьютере, как выполняющиеся сценарии:]

Опция 2: Простой сервер HTTP + ngrok

Для упрощенного примера я создам два файла в ~/test/:

  • test.sh, который произведет текущую метку времени и добавит ее к log.txt:

    #! /bin/sh
    date +%s
    date +%s >> log.txt
    
  • server.py, который будет ожидать удаленного Запроса HTTP и выполняться 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')
    

Теперь мы можем сделать server.py исполняемый файл, выполненный это, затем открывается http://127.0.0.1:8000 в браузере и видят, что сценарий на самом деле работал — он произведет текущую метку времени в нашем окне браузера +, добавляют его к ~/test/log.txt.

Но 127.0.0.1 просто localhost, и мы хотим достигнуть нашего сервера из Интернета. Это то, где ngrok входит. Установите его с sudo apt-get install ngrok-client и выполнитесь ngrok 8000, это даст Вам что-то как:

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

Это https://a1b2c3d4.ngrok.com общедоступный адрес (т.е. доступный из Интернета), который будет на самом деле подаваться Вашим локальным сервером (который выполнит Ваш сценарий, как Вы помните :)). Субдоменом по умолчанию имя дано наугад, но можно установить его в файле конфигурации. См. документы для большего количества информации.

Можно выполнить и сервер и ngrok в фоне, но это - другая история:]

Опция 3: TeamViewer (или VNC + ngrok)

У Вас может даже быть полное графическое дистанционное управление с хостом TeamViewer на Вашем ноутбуке и клиентским приложением TeamViewer по Вашему смартфону. Легкий, но могло быть также транспортное потребление для мобильного использования.

Вместо TeamViewer Вы могли, вероятно, использовать сервер VNC + ngrok на Вашем ноутбуке и клиенте VNC по Вашему смартфону.

2
ответ дан 18 November 2019 в 05:00

В то время как это ни в коем случае не самый быстрый или самый усовершенствованный способ ответить на Ваш вопрос, я думаю, что является, вероятно, самым легким реализовать и понять.

Метод, который я обычно использую, должен настроить фиктивный почтовый ящик и опросить его относительно новых электронных писем каждую секунду. Это обычно занимает приблизительно 5-10 секунд от того, когда Вы послали электронное письмо по своему телефону и до выполнений сценария. Обратите внимание, что необходимо включить IMAP в адресе электронной почты, который Вы создаете.

Также удостоверьтесь, что Ваш сценарий удара запускается со строки:

#!/usr/bin/env bash

Сценарий Python, который я использую, показывают ниже. Конечно, необходимо ввести соответствующую информацию в первые четыре переменные всех заглавных букв. Откройте текстовый редактор и сохраните следующее как 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()

Можно выполнить его с:

python email-run.py

0
ответ дан 18 November 2019 в 05:00

Смотрите на Pushbullet. С Вашего смартфона отправьте сообщение ("нажатие") к Вашему ПК. Простой dbus слушатель работает на Вашем ПК и выполняет сценарий, когда нажатие получено. Существует Ubuntu AppIndicator, который позволяет Вам прислушиваться к нажатиям без браузера. См. здесь .

0
ответ дан 18 November 2019 в 05:00

Другие вопросы по тегам:

Похожие вопросы: