Estou em uma situação em que vários usuários estão compartilhando a mesma conta de usuário em uma máquina remota. Eu tenho um diretório "pessoal" onde escrevi meu próprio .zshrc
arquivo e gostaria de ter uma maneira de:
- Iniciar uma sessão ssh na máquina remota com diretivas do meu arquivo de configuração ssh (por exemplo
ControlMaster auto
) - Esta sessão executa um shell Z
- Ele executa um
.zshrc
no meu diretório "pessoal" (não no diretório inicial do usuário compartilhado)
Seria bom ter um apelido ou uma maneira simples de iniciar essas sessões ssh (é por isso que pensei em usar o arquivo de configuração do OpenSSH), mas estou aberto a outras idéias!
Usando o arquivo de configuração do OpenSSH?
Li na página do manual ssh_config do OpenSSH que posso usar a diretiva LocalCommand
para especificar um comando a ser executado localmente após a conexão bem-sucedida ao servidor. Isso me fez pensar que pode haver uma maneira de dizer ao config
arquivo qual comando executar remotamente após a conexão com o servidor, mas parece não haver nenhum.
ssh mycommand
? E se você deseja executar algum comando de instalação antes de todo comando que vem sobre o ssh, por que não configurar o lado do servidor?.zshrc
em um diretório específico (ou seja, um diretório pessoal "pessoal"). Eu tenteissh -t host_name 'zsh & source /path/to/my_zshrc'
, mas não deu certo (eu tenhoFPATH variable not defined
, e eu acho que é porquezsh
acabamentos antes de executarmy_zshrc
, e muito menos isso não me dar um shell Z)Respostas:
A maneira mais óbvia de executar um comando remotamente é especificá-lo na linha de comando ssh. O comando ssh é sempre interpretado pelo shell do usuário remoto.
Contas compartilhadas geralmente são uma má ideia; se possível, obtenha contas separadas para cada usuário. Se você está preso a uma conta compartilhada, pode criar um alias:
Se você usar a autenticação de chave pública (novamente, recomendado), poderá definir comandos por chave em
~/.ssh/authorized_keys
. Veja esta resposta para mais explicações. Edite a linha da sua chave no~/.ssh/authorized_keys
servidor (tudo em uma linha):fonte
exec
comando. Qual é aexec zsh
diferença de ligarzsh
diretamente? Por que é importante neste caso em particular?ssh -t [email protected] 'HOME=~/bob; exec zsh'
eu entendoHOME=~/bob: command not found
. Eu acho que estoutcsh
. Eu tenho o mesmo problema se tentarHOME=/home/bob
. Eu tentei no bash e zsh. Alguma pista que possa estar causando isso? Finalmente, a sintaxe acima me deixaria com a sessão ssh aberta? (o que eu quero). Obrigado novamente.exec
substitui o shell original pelo zsh; semzsh
, o shell original permaneceria na memória até o zsh sair e depois sair. A principal diferença é economizar um pouco de memória, não é muito importante. Se o seu shell de login for (t) csh, usesetenv HOME ~/bob; exec zsh
. Por fim, como o zsh é iniciado sem argumentos, você obtém uma sessão do shell, como faria se apenas rodassessh
e tivesse o zsh como seu shell de login.exec zsh
comando?ZDOTDIR
para fazer o zsh procurar arquivos de ponto em um diretório diferente. Se você tem algum controle sobre os arquivos de pontos, então você pode fazer algo como addeval $LC_STARTUP_CODE
para$ZDOTDIR/.zshrc
e passar o código para executar na variável de ambienteLC_STARTUP_CODE
.Para executar um comando remotamente após conectar o servidor, adicione no seu arquivo .ssh / config o seguinte trecho
fonte
LocalCommand
diretiva é executar um comando no shell local , não no shell remoto .