Используйте оболочку, не установленную на удаленной машине

9

Учитывая сценарий:

  • Удаленная машина: SSH сервер; пользователь не имеет прав администратора;
  • Локальный компьютер: клиент SSH; Пользователь имеет права администратора.

Если пользователь , входящий в систему с удаленного компьютера с локального компьютера , желает взаимодействовать с удаленным пользователем с помощью оболочки, не установленной на удаленном компьютере , как пользователь может выполнить это самостоятельно?

Пример: пользователь использует fish на локальном компьютере и хочет также использовать его на удаленном компьютере , но на удаленном компьютере установлены только bash и zsh .

sampablokuper
источник
1
@mikeserv, спасибо. Не могу понять призыв к понижению, который я считаю непривлекательным и непривлекательным . У меня нет проблем с изменениями тегов, но я возражаю против того, чтобы мой вопрос был переформатирован таким образом, чтобы уменьшить ясность. Я не пользуюсь чатом, поэтому не могу обсуждать это там.
Сампаблокупер
злоупотребление из жирного шрифта является трудно читать . И в предложениях пропущено много слов.
Жиль "ТАК - перестань быть злым"
2
@sampablokuper вы использовали жирный шрифт для акцентирования на том, что трудно прочитать; далее вы подходите, когда все подчеркнуто, ничего нет .
Дероберт
1
@ Жиль, ни в одном из предложений моего вопроса тоже не хватает слов.
Сампаблокупер
1
@derobert для классификации (и, следовательно, ясности), так же, как это делают многие компьютерные учебники. В моем вопросе взаимодействуют три системы, и их названия (или, если хотите, ссылки на них) выделены жирным шрифтом. Ничто другое не выделено жирным шрифтом. Прежде чем кто-то спросит (я имею в виду, действительно! Меня уже просят обосновать совершенно приемлемые варианты форматирования!), Да, одна из систем - человеческая, а две другие - не человеческие. И Жиль, спасибо, но нет, я не хотел использовать форматирование кода. Я предпочитаю использовать форматирование кода только для команд или кода, ни один из которых не присутствует в моем вопросе.
Сампаблокупер

Ответы:

6

Установите вашу любимую оболочку на удаленной машине. Для этого вам не нужны какие-либо привилегии администратора, вы можете устанавливать программы в своем домашнем каталоге, это просто менее удобно. Смотрите Установка на debian 5 32-bit без рута , Как установить программу локально без привилегий sudo? , Отслеживание программ и других вопросов .

Если вы хотите автоматически войти в оболочку, которую вы установили самостоятельно, а не в оболочку по умолчанию, см. Раздел Создание оболочки zsh по умолчанию без доступа root

Если вам нужно только манипулировать удаленными файлами, вы можете использовать SSHFS для монтирования дерева удаленных каталогов на локальном компьютере.

mkdir ~/remote.d
sshfs remote.example.com:/ ~/remote.d
ls ~/remote.d/

fusermount -u ~/remote.d

Если у вас нет места в вашем домашнем каталоге или это общая учетная запись, вы можете обойтись настройкой обратного туннеля SSH и смонтировать локальное дерево каталогов на удаленном компьютере с SSHFS , предполагая, что эти два компьютера работают под одной и той же архитектурой ( тот же вариант Unix на том же типе процессора). Если две машины имеют несовместимые архитектуры, вы даже можете установить программы для удаленной архитектуры в локальном домашнем каталоге. Это может быть не очень удобно, так как вам придется правильно устанавливать пути для программ, чтобы находить свои библиотеки, файлы конфигурации и другие файлы данных.

Eshell Emacs совместим с Tramp : если вы перейдете на удаленный каталог в Eshell, вы будете выполнять команды на удаленном компьютере.

Жиль "ТАК - перестань быть злым"
источник
3

Простой ответ: Нет, вы не можете использовать на удаленном блоке программу, которая не установлена ​​на удаленном блоке.

Обходной путь: вам не нужны права администратора для установки оболочки в удаленной системе. Вы можете установить его в свой домашний каталог, но, вероятно, вам придется скомпилировать его из исходников. Как правило, используя что-то вродеconfigure --prefix=${HOME}/local

Последнее замечание: вы не можете изменить оболочку по умолчанию на не "официальную" (см. /etc/shells), Но вы можете поместить что-то вроде exec fishв.bashrc

оборота andcoz
источник
2

Пользователь может использовать sshfs для монтирования своего удаленного $ HOME на своем локальном компьютере. В таком сценарии пользователь не будет использовать свою предпочтительную оболочку на удаленной машине напрямую, но, тем не менее, лучше, чем ничего.

Аркадиуш Драбчик
источник
2

Основной подход заключается в том, чтобы скопировать исполняемый файл оболочки на удаленный хост, а scpзатем выполнить его ssh, например

scp /usr/bin/fish remote:fish && ssh -t remote '~/fish'

-tНеобходимо для того , что sshвыделяет TTY, что он не будет делать по умолчанию при выполнении удаленной команды.

Это предполагает, что ваш удаленный хост работает под управлением той же операционной системы. Если нет, вы захотите выяснить удаленную операционную систему и скомпилировать (возможно, статический) двоичный файл, который вы можете скопировать.

Mikel
источник
2

Очевидный ответ «установить команду на удаленной машине» - самое чистое решение, поэтому мы не должны его игнорировать:

Если это возможно , чтобы установить команду как корень, например , с
sudo apt-get install fish,
команда может работать следующим образом:

ssh remote -t fish


Вопрос в том, что делать, если мы не можем установить команду на удаленном компьютере.
Или, более конкретно, речь идет о том, что мы не можем установить команду от имени пользователя root .
Это не значит, что мы не можем установить вообще!

Что еще возможно, это установить команду внутри домашнего каталога , собрав ее из исходного кода .

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

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

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

Для установки команды в домашний каталог configureпредоставляется путь для установки, который необходимо проверить в инструкциях по сборке. Например:

mkdir ~/local
./configure --prefix=~/local 
make
make install

Обратите внимание , что это не sudo make installкак обычно - в это весь смысл установки его на месте , чтобы не нужно SUDO здесь.

Для получения общей информации об установке программ из исходного кода см. Askubuntu.SE: Как мне установить файл .tar.gz (или .tar.bz2)?

Volker Siegel
источник
0

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

env_explosion
источник