Я не уверен, как вы можете поместить свой локальный .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должен быть указан для того, чтобы оболочка была выбираемой.