SSH equivalente a .profile / .bashrc


14

Eu estou procurando uma maneira de definir automaticamente alguns aliases dentro da minha sessão em qualquer servidor para o qual eu ssh. Não consigo colocá-los nos .bashrcarquivos no servidor porque as contas de usuário com as quais faço login são compartilhadas por outras pessoas e, além disso, existem dezenas delas, e seria doloroso manter um script em todas as máquinas. Eu sei que eu poderia usar expectpara digitar os aliases automaticamente, mas eu queria saber se o OpenSSH tem algo embutido que poderia ser usado para conseguir isso?

Respostas:


7

Não há nada de errado em fazer isso no esperado. A outra maneira que eu fiz isso também é bastante suja, com um script, primeiro scp o perfil que você deseja executar, depois faça o ssh, execute-o e permaneça conectado.

Portanto, coloque todas as configurações de perfil em um arquivo local .<local username>-<hostname>-init.she 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"

Eu gosto disso porque não requer nenhuma configuração especial no servidor, bom!
Ramon

4

Você pode colocar sua configuração .bashrce deixá-la executar apenas quando efetuar login. Para tornar isso possível, você pode passar uma variável de ambiente através do 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 deve funcionar)


Como isso cumpre o objetivo de configurar as coisas automaticamente em qualquer servidor no qual o OP se conecta?
Womble

Isso não. Ele resolve o "as contas de usuário que ingresse em são compartilhadas por outras pessoas" parte da pergunta
krissi

Isso é quase exatamente o que eu faço, mas com uma diferença - em vez de aceitar essa variável de ambiente de fora, eu a defino na própria chave SSH. Isto significa que .ssh / authorized_keys contém linhas começando com ambiente = "IAMTHEGREATEST = forsure" ssh-dss ...
Bron Gondwana

3

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

Se você não quiser usar arquivos ~ / .ssh / rc individuais , 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 pode impedir que outras pessoas percebam que isso existe.

O arquivo / etc / ssh / sshrc é fornecido SOMENTE se ~ / .ssh / rc não existir, portanto você poderá efetivamente atingir duas camadas de complexidade.


Ding ding ding, nós temos um vencedor!
Pausado até novo aviso.

Perdeu aquele! Embora pareça atraente, isso ainda exigirá a configuração de cada servidor individualmente, pois está do lado do servidor, certo?
Ramon

Sim, do lado do servidor, mas você só precisa scp um arquivo, uma vez. Não há realmente uma maneira fácil de enviar um fluxo de comandos para serem processados ​​imediatamente após o login. {Grin} Dê-me um pouco embora, talvez escrever algo ... {não hoje!}
lornix

2

Aliases são definidos e interpretados pelo shell.

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

Você pode escrever um sshwrapper no lado do cliente que configure um ambiente agradável no lado remoto, mas não seria bonito.


0

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


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.

Então cada servidor precisa apenas de um pequeno script 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.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.