Supondo que você esteja executando no Linux, você pode usar o comando chsh
.
chsh -s /bin/ksh foo
chsh -s /bin/bash username
Como faço para definir o shell que é usado quando um usuário SSHs para um servidor. Por exemplo, eu 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 eu ssh para a máquina.
Eu não quero ter que passar um monte de parâmetros com o ssh, não posso definir o shell padrão?
man chsh
altera o shell, nem sempre funciona
Como alternativa, você pode colocar exec /bin/zsh
em seu script de login bash. Isso substituirá a instância bash pelo seu shell.
Ou você pode fazer ssh host "zsh -l"
Edite / etc / passwd (se você tiver os direitos, ou peça ao administrador do seu sistema) para alterar o seu shell padrão.
Se você não pode alterar o seu shell padrão, ssh -t user@host 'zsh -l'
funciona.
O -t
flag força uma alocação pseudo-tty e o -l
flag gera um shell de login .
Não tenho certeza de como você pode colocar seu local .zshrc
no servidor remoto (isso sem armazená-lo permanentemente), isso me permite alterar meu shell de login no servidor remoto.
Como é uma conta compartilhada, posso usar zsh
apenas para mim com esse método.
Adicione isso ao seu arquivo ~/.ssh/config
em sua máquina local.
Host yourServer
HostName <IP, FQDN or DNS resolvable name>
IdentityFile ~/.ssh/<your keyfile>
RemoteCommand zsh -l
RequestTTY force
User <yourUsername>
Pode haver uma maneira rápida de realizar o que você está procurando, como abaixo.
ATENÇÃO Isto vem sem garantias e não parece 'sábio', porém eu consegui colocar meu arquivo local no servidor e obtê-lo no shell de login usando isto.
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
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 obtê-lo. Aqui está a captura, isso acontece somente após a conexão 'bem-sucedida' ao host remoto. Significado:
sleep
sftp
para colocar seu arquivo no servidor remoto, o servidor remoto é ativado a partir de sleep
e origina seus scripts. É super legal, eu gostaria de saber se há um jeito melhor também.
Atualização:
Isso pode ser usado em vez do tempo de sono "longo":
RemoteCommand zsh -l -c 'while [[ ! -f /tmp/somefile ]]; do sleep 0.05; done; source /tmp/somefile; zsh'