Identifique minha máquina cliente específica sobre o ssh para o servidor

3

Compartilho um servidor / ambiente de desenvolvimento com alguns outros engenheiros e todos compartilhamos uma conta de usuário nesse servidor.

Eu o uso com frequência suficiente para fazer algumas configurações via .bashrc, mas não quero que essas alterações afetem todos os demais usuários da conta. Idealmente, gostaria de fazer algo como:

if [ "$SSH_CLIENT_USER" = "<me>" ]; then
    # do my config
fi

Existe alguma variável de ambiente definida pelo ssh que possa ser usada para me identificar exclusivamente? Ou alguma outra maneira de diferenciar máquinas clientes? Talvez alguma configuração ssh eu poderia fazer com o meu laptop para que ele se identifique? Eu não tenho direitos de administrador para o servidor (e não gostaria de usá-los de qualquer maneira), mas é claro que estou aberto para fazer qualquer alteração na configuração do meu laptop.

    
por Joe K 11.02.2016 / 19:54

3 respostas

2

Jakuje tinha muitas boas ideias que, infelizmente, não funcionaram por diferentes razões, mas a sugestão sobre o encaminhamento de agentes me deu uma ideia que funciona.

ssh-add -l lista os agentes disponíveis e, como minha chave está armazenada no diretório pessoal do meu laptop, que contém meu ID de trabalho exclusivo, consegui usar isso:

if [[ $(ssh-add -l 2> /dev/null) == *"<my-id>"* ]]; then
    # do my config
fi

(Emparelhado com ForwardAgent yes no meu local ~/.ssh/config )

    
por 11.02.2016 / 22:09
1

A página de manual para ssh fornece algumas respostas possíveis. Existem muitas variáveis diferentes, das quais esta pode ser interessante para você:

Se você se conecta sempre do mesmo endereço IP (ou do conjunto finito), você pode usar

SSH_CONNECTION

Identifies the client and server ends of the connection. The variable contains four space-separated values: client IP address, client port number, server IP address, and server port number.

Você pode definir suas variáveis

Espero que você esteja usando chaves ssh para autenticação. Se você puder prefixar sua chave com o modificador no arquivo authorized_keys , para definir outra variável de ambiente, como:

environment="WHOIAM=my-mane" ssh-rsa AAAAB3Nza...LiPk== [email protected]

e, em seguida, você pode verificar essa variável no ~/.bashrc . Conforme descrito na página de manual do sshd

Você pode passar as variáveis do cliente

Se você tivesse acesso à configuração do servidor, poderia configurar o cliente e o servidor para enviar e aceitar alguma variável de ambiente de sua escolha ( SendEnv e AcceptEnv options).

Você pode detectar configurações especiais

Outras ideias podem ser usar ssh-agent encaminhamento (se você sabe que colegas não o usam) e verificar a variável $SSH_AUTH_SOCK .

    
por 11.02.2016 / 20:05
1

Se você não se importa em mexer com o seu comando SSH local (que você executa na sua máquina para se conectar ao servidor), então você pode executá-lo assim:

ssh user@remote -t 'export SPECIAL_ID=magic; bash -l'

(Obviamente, você gostaria de colocar isso em um script ou alias de shell).

Isso iniciará um novo shell, muito parecido com o que você normalmente faz, mas primeiro defina uma variável de ambiente que você possa verificar em .bashrc e amigos.

Outra maneira de obter o mesmo efeito é definir a opção SendEnv no arquivo .ssh/config , mas isso também exige que você possa definir a opção AcceptEnv apropriada no arquivo /etc/ssh/sshd_config do servidor, o que pode não ser possível se você não tiver direitos de administrador no servidor - para que a solução acima forneça o mesmo efeito sem precisar de direitos de administrador no servidor.

    
por 11.02.2016 / 23:59

Tags