Temos o servidor bastião B. Precisamos fazer o SSH de A a B a C, usando chave privada.
Qual é a melhor opção:
Coloque a chave SSH privada no servidor B. Lemos que é uma má idéia fazer isso em um ambiente de produção.
A partir daqui :
Nunca coloque suas chaves privadas SSH na instância do bastião. Em vez disso, use o encaminhamento do agente SSH para conectar-se primeiro ao bastião e depois a outras instâncias em sub-redes privadas. Isso permite que você mantenha sua chave privada SSH apenas no seu computador.
Use o encaminhamento de agente SSH . Para configurar o encaminhamento de agente, preciso permitir o encaminhamento de TCP. Ao configurar o encaminhamento do agente, um arquivo de soquete é criado no host de encaminhamento, que é o mecanismo pelo qual a chave pode ser encaminhada para o destino. Nas configurações do Bastião na AWS:
Encaminhamento de TCP: definir esse valor como true habilitará o encaminhamento de TCP (encapsulamento SSH). Isso pode ser muito útil, mas também é um risco à segurança; portanto, recomendamos que você mantenha a configuração padrão (desabilitada), a menos que seja necessário
Também daqui :
Encaminhamento de agente SSH considerado prejudicial
O que é melhor? E a alternativa do segundo link: ProxyCommand , entendo que ajuda com o problema do arquivo de soquete, mas ainda acho que tenho que ativar o encaminhamento de TCP, por isso é seguro o suficiente?
ssh hostb
digitará o comando, para que ele possa pesquisar hostb na configuração local e saber que precisa se conectar através do hosta. Ele não poderia fazer isso, se você colocar a configuração em hosta ...Respostas:
Use ProxyCommand ou ProxyJump
Eu recomendaria usar
ProxyCommand
(ou melhor ainda,ProxyJump
pois a sintaxe é mais fácil, mas requer o openssh 7.3+, acho que no lado do cliente), e você não precisa implantar uma chave privada no Bastião, tudo permanece local.Exemplo com ProxyJump
No computador cliente, você escreve um arquivo
~/.ssh/config
com um conteúdo semelhante ao seguinte:Então, o
ssh srvC
fará conectá-lo a C via B (bastião) sem o Agent Forwarding nem implantar a chave privada no bastião.No exemplo acima, "bastion" é um alias para seu host Bastion e srvC é um alias para seu servidor C. No caso de
HostName
você precisar colocar IPs ou nome de domínio totalmente qualificado real para seus hosts. Para os usuários, é necessário atualizar oUser
nome de login correto no Bastion e no servidor C. Finalmente, issoIdentityFile
é opcional se você usar um agente local (por exemplo, KeeAgent ou ssh-agent), mas se não estiver em execução, também será trabalhe e peça cada senha chave.Implantando as chaves públicas
Obviamente, você precisa implantar as chaves públicas no bastião e no srvC. Você pode usar (o sinal $ é apenas para ilustrar o prompt, não digite):
Nota: o acima funcionará apenas se a autenticação por senha ainda for permitida. Após a implantação acima e verificando se tudo funciona como pretendido, você deve proibir a autenticação de senha nos 2 servidores.
Exemplo com ProxyCommand em vez de ProxyJump
Se você possui uma versão mais antiga do OpenSSH que não suporta
ProxyJump
(no lado do cliente), substitua:por
Tanto quanto eu entendi, isso é semelhante.
fonte
Eu vi a resposta sobre o ProxyJump. Vamos falar sobre o ProxyCommand .
Mas espere, espere! Posso escrever para você como invadir o servidor que usa o encaminhamento de agentes, seria muito mais fácil entender a diferença!
Vamos cortar!
Para as etapas básicas: você pode ler meu post aqui
As etapas básicas são as seguintes:
Como usar o AgentForwarding
-Criar configuração em ~ / .ssh / config
-Adicione sua chave de autenticação ao ssh-agent
-Conectar ao hos bastião
-Conecte o servidor de aplicativos do bastião
Hacking!
Você pode, bem, me fazer a pergunta:
Meu servidor está seguro? E a resposta é bastante simples:
Por quê?
E onde está o problema?
Por quê?
Como hackear servidores se você comprometeu o host bastião?
Rastrear alvo
No diretório / tmp, você pode ver algo assim:
Vamos abrir o arquivo temporário
Vamos ver as conexões com esse ID do processo.
resultado:
e quem está conectado?
resultado:
Também podemos ver arquivos de soquete:
resultado:
E o que acontece quando o cliente será conectado ao servidor remoto? vamos ver:
Podemos até ver se o arquivo de soquete é usado usando o netstat:
Roubar informações do soquete e endereço IP
Agora precisamos roubar as informações do soquete enquanto a sessão do host bastião está aberta . Ah, também precisamos do IP do servidor de destino , então use netstat:
A etapa final para usar o arquivo de soquete encaminhado
Verifique se a chave está carregada .
O resultado deve ser algo assim :
Servidor está hackeado, como corrigir o problema de segurança?
Comando de proxy
Para operações básicas: como transferir arquivos através dos servidores (de cliente para servidor, servidor para cliente), você pode ler no meu post aqui
Conclusão
Mais informações, consulte o meu blog . Além disso, tenho alguns screeenshots, portanto pode ser útil para você.
fonte
channel 0: open failed: administratively prohibited: open failed. stdio forwarding failed.
. Você tem uma ideia do porquê? No log seguro, vejo:refused local port forward: originator 127.0.0.1 port 65535, target *app-ip* port 22
Basta usar o encaminhamento de agente SSH como a maioria dos outros.
Vantagem: não há chaves armazenadas no bastião que possam ser mal utilizadas.
Espero que ajude :)
fonte