Permitir apenas chaves específicas no encaminhamento de agentes?

7

É possível usar o encaminhamento de agentes excluindo todas as chaves de serem encaminhadas, exceto aquelas especificamente declaradas? Alternativamente, existem maneiras de especificar a ordem em que as chaves são tentadas por sessão?

Usar ssh-agent exige o gerenciamento de soquetes diferentes: link

Existe algum agente alternativo que seja mais facilmente configurável?

Por exemplo:

Client A -->  ssh/agent-forwarding --> Server B -->  Server C 
                                            | 
                                            ------>  Server D 

Eu quero permitir apenas uma chave no encaminhamento de agentes, permitindo: A -> B -> C e não A -> B -> D . Ou, pelo menos, especificar a ordem em que as chaves são tentadas.

(Editado para maior clareza após responder @ jeff-ferland.)

    
por dgo.a 17.03.2012 / 04:11

3 respostas

1

Não estou ciente de nenhum agente que permita o encaminhamento seletivo de chaves conforme você fez o diagrama. Uma vez que uma chave é encaminhada para um host, é como se ela fosse armazenada localmente e possa ser usada para autenticar contra qualquer host a partir dali.

Analisando sua pergunta em outro nível, tenho duas ideias sobre o que você pode estar tentando fazer:

  • Impedir que alguém se autentique em determinados hosts sem presença física em um local.

Se este é o seu objetivo, você não pode alcançá-lo através do controle de chaves de autenticação. Você deve controlar o acesso por meio de restrições de arquitetura e host, de modo que nenhum host que possa ser acessado remotamente seja capaz de acessar um host "seguro".

  • "Proteja" determinadas chaves para que não sejam expostas.

Se este é seu objetivo, é um mal-entendido de como proteger as chaves. As próprias chaves nunca são encaminhadas. A capacidade de acessar o agente ssh para autenticar em uma chave é encaminhada. No entanto, esse encaminhamento só pode ser aproveitado enquanto o encaminhamento estiver em vigor e somente se a máquina para a qual você direcionou seu agente for executada por um administrador não confiável (voluntariamente ou por meio de comprometimento). Assim, no seu diagrama, a menos que você faça logoff com sucesso da máquina B - > D e exportam encaminhamento de A - > B - > D, você não corre o risco de expor suas credenciais. Você pode encaminhar de A - > B com segurança se você confia em B.

Eu sugiro que você leia uma explicação detalhada do como o encaminhamento funciona com diagramas se você ainda não está claro sobre o conceito.

    
por 17.03.2012 / 19:13
2

Um recurso como o solicitado pertenceria ao cliente ssh.

Seria muito difícil para o agente ssh descobrir quando estava se comunicando através de um encaminhamento e quando estava se comunicando com um cliente ssh local. Deixar o servidor aplicar a restrição seria uma falha de segurança. Isso deixa o cliente ssh como o único local em que esse recurso poderia razoavelmente existir.

Uma rápida olhada na fonte openssh me leva à função client_request_agent em clientloop.c. Pelo que vejo, fico com a impressão de que o cliente ssh simplesmente encaminha o fluxo de bytes sem tentar entender quais teclas estão sendo usadas. Isso significa que seria necessário um esforço significativo para adicionar esse recurso ao cliente.

Outro recurso relacionado, que poderia ser adicionado com menos trabalho, seria uma opção para usar dois agentes diferentes. Um agente pode ser usado para autenticar com o servidor enquanto outro agente pode ser encaminhado para o servidor.

Ambos seriam recursos úteis que eu também usaria, mas parece não existir no openssh (ainda).

    
por 29.03.2014 / 20:19
1

Se esse problema ocorrer apenas para a implantação de aplicativos usando vários repositórios privados que exigem chaves diferentes:

Você pode ignorar completamente o encaminhamento de agentes. Copie os arquivos para a máquina que contém as várias chaves e, em seguida, rsync os repositórios clonados para o servidor onde ocorre a implantação.

Client A
    |
* private keys
* 'git clone ...' private repos 
* /tmp/repos
      | 
      |  ------------> rsync/scp -----------> Server B

Você pode automatizar o processo com alias, scripts de shell, etc. O Capistrano ainda tem esse recurso. Ele é chamado de estratégia de cópia:

    
por 18.03.2012 / 06:36