Я нахожусь в ситуации, когда несколько пользователей используют одну и ту же учетную запись на удаленной машине. У меня есть «личный» каталог, где я написал свой собственный .zshrc
файл, и я хотел бы иметь возможность:
- Запустите сеанс SSH на удаленном компьютере с директивами из моего конфигурационного файла SSH (например
ControlMaster auto
) - Этот сеанс запускает оболочку Z
- Он запускается
.zshrc
в моем «личном» каталоге (не в домашнем каталоге общего пользователя)
Было бы неплохо иметь псевдоним или простой способ запуска таких ssh-сессий (вот почему я подумал об использовании файла конфигурации OpenSSH), но я открыт для любых других идей!
Используете конфигурационный файл OpenSSH?
Я прочитал на справочной странице OpenSSH ssh_config, что могу использовать директиву, LocalCommand
чтобы указать команду для локального запуска после успешного подключения к серверу. Это заставило меня подумать, что может быть способ сообщить config
файлу, какую команду запускать удаленно после подключения к серверу, но, похоже, ее нет.
ssh mycommand
? И если вы хотите выполнить какую-либо команду установки перед каждой командой, которая приходит через ssh, почему бы не настроить серверную часть?.zshrc
в определенном каталоге (то есть в «личном» домашнем каталоге). Я пытался,ssh -t host_name 'zsh & source /path/to/my_zshrc'
но это не сработало (у меня получилосьFPATH variable not defined
, и я думаю, что это потому, чтоzsh
финиширует до того, как запуститсяmy_zshrc
, не говоря уже о том, что это не дало мне Z-оболочки)Ответы:
Наиболее очевидный способ выполнить команду удаленно - указать ее в командной строке ssh. Команда ssh всегда интерпретируется оболочкой удаленного пользователя.
Общие учетные записи, как правило, плохая идея; если это вообще возможно, получить отдельные учетные записи для каждого пользователя. Если вы застряли с общей учетной записью, вы можете создать псевдоним:
Если вы используете аутентификацию с открытым ключом (опять же, рекомендуется), вы можете определить команды для каждого ключа в
~/.ssh/authorized_keys
. Смотрите этот ответ для более подробных объяснений. Отредактируйте строку для вашего ключа~/.ssh/authorized_keys
на сервере (все в одной строке):источник
exec
команде. Чемexec zsh
отличается от звонкаzsh
напрямую? Почему это важно в данном конкретном случае?ssh -t shared-account@example.com 'HOME=~/bob; exec zsh'
я получаюHOME=~/bob: command not found
. Я думаю, что я наtcsh
. У меня та же проблема, если я попытаюсьHOME=/home/bob
. Я пробовал на bash и zsh. Любые подсказки, что может быть причиной этого? Наконец, оставит ли синтаксис выше с открытой сессией ssh? (что я хочу). Еще раз спасибо.exec
заменяет оригинальную оболочку на zsh; безzsh
этого исходная оболочка останется в памяти, пока zsh не выйдет и не завершится. Основное отличие - экономия памяти, это не очень важно. Если ваша оболочка входа в систему (t) csh, используйтеsetenv HOME ~/bob; exec zsh
. Наконец, поскольку zsh запускается без аргументов, вы получаете сеанс оболочки, как если бы вы только что запустилиssh
и использовали zsh в качестве оболочки входа в систему.exec zsh
команды?ZDOTDIR
чтобы заставить zsh искать точечные файлы в другом каталоге. Если у вас есть некоторый контроль над точечными файлами , то вы можете сделать что - то вроде дополненияeval $LC_STARTUP_CODE
к$ZDOTDIR/.zshrc
и передать код для выполнения в переменном окруженииLC_STARTUP_CODE
.Чтобы выполнить команду удаленно после подключения к серверу, добавьте в файл .ssh / config следующий фрагмент
источник
LocalCommand
директива заключается в запуске команды на локальной оболочке, а не на удаленной оболочке.