Como defino o shell que é usado quando um usuário faz SSH para um servidor. Por exemplo, não suporto BASH e preciso usar ZSH, como faço para que o ZSH seja carregado junto com meu perfil ( .zsh_profile
) quando faço ssh na máquina.
Também não quero passar vários parâmetros com ssh, não posso definir o shell padrão?
Responder1
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 umshell de login.
Responder2
Supondo que você esteja executando no Linux, você pode usar o chsh
comando.
chsh -s /bin/ksh foo
chsh -s /bin/bash username
Responder3
man chsh
muda de shell, nem sempre funciona
Como alternativa, você pode inserir exec /bin/zsh
seu script de login do bash. Isso substituirá a instância do bash pelo seu shell.
Ou você pode fazerssh host "zsh -l"
Responder4
Não tenho certeza de como você pode colocar seu servidor local .zshrc
em um servidor remoto (sem armazená-lo permanentemente lá). Isso funciona para eu alterar meu shell de login no servidor remoto.
Como é uma conta compartilhada, só posso usar zsh
esse método para mim.
Adicione isso ao seu ~/.ssh/config
arquivo 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 hackeada de realizar o que você procura, como abaixo.
AVISO Isso não tem garantias e não parece "sensato", mas consegui colocar meu arquivo local no servidor e obtê-lo no shell de login usando isso.
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 localmente, que é usado para copiar seu arquivo local para o servidor remoto para obtê-lo. Aqui está o problema: isso acontece somente após uma conexão 'bem-sucedida' ao host remoto.
Significado:
- Sua conexão remota deve estar aberta e ativa
- Seu shell remoto ainda não possui o arquivo, então é necessário esperar até que o arquivo esteja lá, portanto
sleep
- Seu local usa
sftp
para colocar seu arquivo no servidor remoto, o servidor remoto é ativadosleep
e origina seus scripts.
É super hackeado, gostaria de saber se existe uma maneira 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'