Как установить оболочку, которая будет использоваться при подключении пользователя к серверу по SSH. Например, я терпеть не могу BASH и мне нужно использовать ZSH, как мне сделать так, чтобы ZSH загружался вместе с моим профилем (.zsh_profile
) когда я подключаюсь к машине по ssh.
Я тоже не хочу передавать кучу параметров с помощью ssh, нельзя ли установить оболочку по умолчанию?
Предполагая, что вы работаете в Linux, вы можете использовать chsh
команда.
chsh -s /bin/ksh foo
chsh -s /bin/bash username
man chsh
меняет оболочку, не всегда работает
Как вариант, можно наклеить exec /bin/zsh
в вашем сценарии входа в bash. это заменит экземпляр bash на вашу оболочку.
Или ты можешь сделать ssh host "zsh -l"
Отредактируйте / etc / passwd (если у вас есть права или обратитесь к системному администратору), чтобы изменить оболочку по умолчанию.
Если вы не можете изменить оболочку по умолчанию, ssh -t user@host 'zsh -l'
работает.
В -t
флаг заставляет выделение псевдо-tty, а -l
флаг порождает оболочка входа.
Я не уверен, как можно поставить местный .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'