Как запустить локальное приложение на удаленном сервере с помощью SSH?

Как запустить локальное приложение на удаленном сервере с помощью SSH?

Я хотел бы узнать, возможно ли запустить локальное приложение на удаленном сервере, используя протокол SSH?

решение1

Чтобы выполнить локально установленные приложения, используя ЦП и память другого компьютера, вы можете — при условии, что процессоры совместимы — попробовать это. Я не уверен, насколько хорошо это сработает, но теория кажется обоснованной :) Вам, вероятно, понадобится доступ суперпользователя на удаленном сервере, чтобы это сработало.

  • ssh-подключение к удаленному серверу

  • Смонтируйте локальную корневую файловую систему где-нибудь. Вам не следует этого делать вообще, если вы не уверены, что можете доверять администраторам удаленной системы.

    • Это можно сделать через sshfs, если вы можете подключиться по ssh с сервера на локальную систему. Я думаю, что вы можете это сделать, перенаправив порт обратно через соединение, которое вы создали, когда подключались по ssh с локальной системы на сервер, но я сам не занимался такими махинациями.
      • Обычно, если локальная машина находится в домашней сети, вы просто настраиваете переадресацию портов на маршрутизаторе. Вероятно, вам следует отключить парольный вход в sshd_config вашей локальной системы, прежде чем идти этим путем, и сгенерировать ключ ssh с парольной фразой для вашей учетной записи на сервере, scpвернув id_?sa.pubфайл обратно в local, чтобы добавить его в ваш ~/.ssh/authorized_keys. Еще одна хорошая идея — ограничить IP-адреса, которые могут подключаться к вашей машине по ssh. И так далее.
    • Если вы хотите запустить что-то, что должно запускаться как root, я думаю, вам нужно настроить монтирование sshfs как root в вашей локальной файловой системе. Это означает, что вам нужно разрешить людям подключаться по ssh к вашей локальной машине как root, что является еще одним сомнительным политическим ходом. На самом деле я не уверен в этом, вы можете использовать sudo в оболочке chroot.
    • Вы можете смонтировать его другими способами, например, через NFS, но sshfs, вероятно, самый простой способ защититься. Делать все это через VPN, вероятно, было бы разумнее.
  • После того, как вы смонтировали файловую систему и все еще подключены к серверу по SSH, выполните:

    chroot /путь/к/монтированию/локальной/файловой системы АРГУМЕНТЫ КОМАНДЫ

Или вы можете просто cdперейти в каталог и запустить chroot, и тогда у вас будет своего рода root shell в вашей собственной системе, с обработкой, выполняемой сервером. Первая форма имеет преимущество в том, что позволяет вам удобно сохранять вывод в серверной системе, поскольку любые перенаправления будут выполнены на сервер. НАПРИМЕР

chroot /path/to/mount/of/local/filesystem find -iname "somefile" > ~/tmp/somefile.find.out

сохранит список файлов с именем "somefile" в вашем домашнем временном каталоге насервер.

предостережения

Это, по крайней мере, с моей точки зрения, довольно экспериментально. Я не уверен, что может пойти не так, но я бы не стал пробовать это, если бы несколько человек не поручились за это. Даже тогда я бы не стал пробовать это в производственной системе. Если бы я делал IT-шоу на ТВ, этот сегмент был бы снабжен субтитрами со словами "НЕ ПЫТАЙТЕСЬ ПОВТОРИТЬ ЭТО ДОМА".

Определенно вам понадобятся совместимые процессоры на двух машинах: если локальная система i386, сервер должен быть i386 или amd64. Кроме того, поскольку ядро ​​сервера будет выполнять работу, вы сможете запускать только локальные приложения, которые работают с версией ядра, работающей на сервере. Вероятно, было бы лучше, если бы они были одной и той же версии. Так что если и на локальной машине, и на удаленном сервере запущен 32-битный Debian Squeeze, то это может работать без проблем.

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

решение2

Это во многом зависит от того, как вы определяете используемые термины:

  • «Запуск приложения» обычно означает «разрешение ЦП обрабатывать инструкции двоичного файла («.exe»)».

  • «Локально» обычно означает «процессор машины, за которой я сижу, выполняет код».

  • ssh используется для шифрования потоков информации

Итак, что же это будет?

  • Хотите запустить локальное приложение локально (с помощью процессора), но хотите взаимодействовать с ним с сервера? Да, это можно сделать через ssh, ищите «ssh tunneling».

  • Хотите ли вы, чтобы ваше локальное приложение обрабатывалось процессором(ами) сервера? Тогда вам нужно скопировать ваш двоичный файл/локальное приложение на сервер, а затем запустить его на сервере. Вы можете использовать ssh для копирования. Но ваше «локальное приложение» больше не является таким уж локальным после копирования.

Вы не можете выполнить код на ЦП, не сделав его предварительно доступным для ЦП.

решение3

Небольшой скрипт оболочки для быстрого и грубого выполнения двоичных файлов на удаленных системах:

#!/bin/bash

SOURCE_BIN="/some/path/binary"
DEST_HOST="name-of-system"
DEST_BIN="/another/path/binary"

cat ${SOURCE_BIN} | \
ssh ${DEST_HOST} "cat >${DEST_BIN}; chmod +x ${DEST_BIN}; ${DEST_BIN} with args; rm ${DEST_BIN}"

решение4

Вы можете с одной машины (машина A) запросить, чтобы другая машина (машина B) запустила программу, уже находящуюся на машине B. ssh позволит вам это сделать.

И я думаю, что вы можете с машины A получить доступ, скажем, к установочному файлу с машины B и запустить его на машине A, что перенесет файл в оперативную память машины A. Я думаю, что общий доступ к файлам Windows делает это. (кстати, это не перемещает и не копирует файл, ни один файл не исчезает и не появляется нигде при этом. Лучшей терминологией может быть то, что файл копируется в оперативную память и становится процессом, это происходит каждый раз, когда программа запускается, даже если она локальная)

В теории я предполагаю, что очень крутой процессор и инструкции могли бы читать из ОЗУ на другом компьютере. Вы бы тоже хотели по сети. Может быть, технология буквально существует, но я не знаю, где/что.

Связанный контент