Я не уверен, как вы можете поместить свой локальный .zshrc
на удаленный сервер (это без постоянного хранения его там), это работает для меня, чтобы изменить мою оболочку входа на удаленный сервер.
Поскольку это общий аккаунт, я могу использовать zsh
только этот метод для себя.
Добавьте это в свой ~/.ssh/config
файл на вашем локальном компьютере.
Host yourServer
HostName <IP, FQDN or DNS resolvable name>
IdentityFile ~/.ssh/<your keyfile>
RemoteCommand zsh -l
RequestTTY force
User <yourUsername>
Там может быть хакерский способ выполнить то, что вы ищете, как показано ниже.
ПРЕДУПРЕЖДЕНИЕ. Это не дает никаких гарантий и не выглядит «мудрым», однако мне удалось поместить свой локальный файл на сервер и использовать его для входа в оболочку входа в систему.
Host someHost
HostName someIP
IdentityFile ~/.ssh/somekey.pem
RemoteCommand zsh -l -c 'sleep 1; source /tmp/somefile; zsh'
PermitLocalCommand yes
LocalCommand bash -c 'sftp %r@%h <<< "put /tmp/somefile /tmp/somefile"'
RequestTTY force
User someUser
Как это работает?
RemoteCommand
определяет, что нужно запускать на удаленной стороне.
LocalCommand
определяет, что нужно запустить на локальном компьютере, который используется для копирования локального файла на удаленный сервер для его поиска. Вот подвох, это происходит только после «успешного» подключения к удаленному хосту.
Смысл:
- Ваше подключение к удаленному должно быть открытым и живым
- Ваша удаленная оболочка еще не имеет файла, поэтому она должна подождать, пока файл не появится
sleep
- Ваш локальный использует,
sftp
чтобы поместить ваш файл на удаленный сервер, удаленный сервер просыпается sleep
и исходные тексты ваших сценариев.
Это супер хакерский, я хотел бы знать, есть ли лучший способ тоже.
Обновление: это можно использовать вместо «долгого» времени сна:
RemoteCommand zsh -l -c 'while [[ ! -f /tmp/somefile ]]; do sleep 0.05; done; source /tmp/somefile; zsh'
/etc/shells
должен быть указан для того, чтобы оболочка была выбираемой.