SSH equivalente a .profile / .bashrc

14

Eu estou procurando uma maneira de definir automaticamente alguns aliases dentro da minha sessão em qualquer servidor que eu ssh para. Não consigo colocá-los nos arquivos .bashrc no servidor porque as contas de usuário com as quais eu faço login são compartilhadas por outras pessoas e, além disso, existem dezenas delas e manter um script em cada máquina seria penoso. Eu sei que eu poderia usar expect para digitar os aliases automaticamente, mas eu estava apenas imaginando se o OpenSSH tem algo embutido que poderia ser usado para alcançar isso?

    
por Ramon 06.07.2012 / 17:00

7 respostas

7

Não há nada de errado em fazer isso. A outra maneira que eu fiz isso é muito sujo também, com um script, primeiro scp o perfil que você deseja executar, em seguida, ssh em, executá-lo e ficar conectado.

Portanto, coloque todas as configurações de perfil em um arquivo local .<local username>-<hostname>-init.sh e execute o script abaixo para efetuar login no host remoto.

#!/bin/sh
[ $# -eq 0 ] && { echo "syntax: $0 <host> [<ssh-option>...]" 1>&2 ; exit 1 ; }
host=$1 ; shift    # use any remaining args as ssh options
initfile=".$USER-'hostname'-init.sh"
scp -q ~/.ssh-init.sh "$host:/var/tmp/$initfile"
ssh -t "$@" $host "bash --rcfile /var/tmp/$initfile"
    
por 06.07.2012 / 18:28
4

Você poderia colocar sua configuração em .bashrc e apenas deixá-los executar quando você fizer login. Para tornar isso possível, você poderia passar uma variável de ambiente por ssh.

.bashrc modificações

# common stuff
if [ -n "$IAMTHEGREATEST" ]; then
  # my personal cool stuff
fi;
# other global stuff

sshd_config modificações:

AcceptEnv ... IAMTHEGREATEST

.ssh/config modificações (lado do cliente):

Host ...
  SendEnv IAMTHEGREATEST

.bashrc modificações (lado do cliente):

alias ssh='IAMTHEGREATEST="forsure" ssh'

(não testado, mas deveria fazer)

    
por 06.07.2012 / 17:33
3

Na página do manual ssh (1) , se você criar um arquivo ~ / .ssh / rc , ele será executado ANTES que o shell de login do usuário seja executado, Assim, dando a chance de fazer tarefas de 'pré-configuração' antes de fazer o login ... o exemplo dado foi montar os compartilhamentos de rede antes de efetuar login.

Se você não quiser usar arquivos individuais ~ / .ssh / rc , poderá fazer o mesmo com / etc / ssh / sshrc . Um teste rápido para verificar seu nome de usuário específico ou algum método de identificação poderia restringir outras pessoas até mesmo de perceberem que isso estava em vigor.

/ etc / ssh / sshrc é SOMENTE originado se ~ / .ssh / rc não existir, assim você pode efetivamente atingir duas camadas de complexidade.

    
por 06.07.2012 / 19:35
2

Os aliases são definidos e interpretados pelo shell.

Infelizmente, não há como ssh passar para o shell remoto.

Você poderia escrever um wrapper ssh no lado do cliente que configura um ambiente agradável no lado remoto, mas não seria bonito.

    
por 06.07.2012 / 17:22
0

Se possível, gostaria de armazenar um pequeno script que inicialize / defina tudo o que você deseja em um servidor acessível de qualquer lugar e execute-o após o login em cada servidor.

    
por 06.07.2012 / 18:41
0

Uma solução possível seria colocar seu script que configura tudo em um servidor da Web que todos os outros servidores possam acessar.

Em seguida, cada servidor precisa apenas de um script pequeno para fazer algo como:

wget http://myserver.com/myawesomescript.sh
chmod +x myawesomescript.sh
./myawesomescript.sh

Dessa forma, você só precisa atualizá-lo em um só lugar.

    
por 06.07.2012 / 18:44
-3

Veja o arquivo .ssh / config

Aqui está um exemplo de link

    
por 06.07.2012 / 17:11

Tags