Como definir o shell usado quando um usuário SSHs para um servidor. Por exemplo, não suporto o BASH e preciso usar o ZSH, como faço para que o ZSH seja carregado junto com o meu perfil ( .zsh_profile
) quando ssh na máquina.
Eu não quero ter que passar um monte de parâmetros com ssh também, não posso definir o shell padrão?
/etc/shells
para que o shell seja selecionável.passwd
pacote .man chsh
muda shell, nem sempre funcionaComo alternativa, você pode manter
exec /bin/zsh
o script de login do bash. Isso substituirá a instância do bash pelo seu shell.Ou você pode fazer
ssh host "zsh -l"
fonte
L
ssh -t
é necessário para obter um TTY para as últimas opções. Por padrão, se um comando (comozsh -l
) for fornecido, o OpenSSH faria um shell sem login, que não alocaria o TTY para você, e-l
não mudará isso (porque isso é executado após o login).Edite / etc / passwd (se você tiver os direitos ou peça ao administrador do sistema) para alterar seu shell padrão.
fonte
Se você não pode alterar seu shell padrão,
ssh -t user@host 'zsh -l'
funciona.O
-t
sinalizador força uma alocação pseudo-tty e-l
gera um shell de login .fonte
Não tenho certeza de como você pode colocar o seu local
.zshrc
no servidor remoto (sem armazená-lo permanentemente), isso funciona para eu alterar meu shell de login no servidor remoto.Como é uma conta compartilhada, posso usar
zsh
somente para mim mesmo com esse método.Adicione isso ao seu
~/.ssh/config
arquivo na sua máquina local.Pode haver uma maneira imprudente de realizar o que você está procurando, como abaixo.
AVISO Isso não oferece garantias e não parece "sábio", no entanto, consegui colocar meu arquivo local no servidor e obtê-lo no shell de login usando isso.
Como funciona?
RemoteCommand
define o que precisa ser executado no lado remoto.LocalCommand
define o que precisa ser executado no local, que é usado para copiar seu arquivo local para o servidor remoto para fornecê-lo. Aqui está o problema, isso acontece apenas após a conexão 'bem-sucedida' ao host remoto.Significado:
sleep
sftp
para colocar seu arquivo em servidor remoto, o servidor remoto é ativadosleep
e origina seus scripts.É super hackish, eu gostaria de saber se existe uma maneira melhor também.
Atualização: isso pode ser usado em vez do tempo de suspensão 'longo':
RemoteCommand zsh -l -c 'while [[ ! -f /tmp/somefile ]]; do sleep 0.05; done; source /tmp/somefile; zsh'
fonte