Configuração Local do Host do Bastião de Salto do Servidor de Gateway

0

Eu quero ssh para um host privado remoto usando um servidor intermediário (bastion, jump, gateway). Este comando funciona bem:

ssh gateway ssh private

Com esta configuração ~ / .ssh / config:

Host gateway
  User gateway-user
  HostName XX.XX.XX.XX
  RequestTTY force

Como posso implementar isso em meu ~ / .ssh / config? Eu tentei inúmeras iterações do ProxyCommand sem sorte. Eu quero usar o arquivo de identidade localizado no host do gateway para acessar hosts privados. Eu quero ser capaz de fazer:

ssh private

Estou ciente da técnica descrita aqui, mas ela exige que minha chave pública esteja em todos os hosts particulares, mas não quero isso:

link

    
por Shaun 02.06.2015 / 14:10

1 resposta

0

Primeiro, configure suas chaves ssh no gateway para que você possa ssh para privado. Em seguida, no seu cliente, crie um par de chaves privadas / públicas separadas que você usa para autenticar no gateway. Por exemplo. ssh-keygen -t rsa -f id_gateway .

Em seguida, no gateway, use a sintaxe command= em seu arquivo authorized_keys. Por exemplo, sua entrada pode ter esta aparência:

command="sh -c 'ssh private ${SSH_ORIGINAL_COMMAND:-}'" ssh-rsa AAAAB3....

Pesquise na página de manual do sshd por command="command" para obter mais informações. Certifique-se de adicionar a chave id_gateway.pub a esta linha. Em seguida, no seu .ssh/config do seu cliente, adicione uma entrada como esta:

Host private
User gateway-user
Hostname xxx.xxx.xxx.xxx
IdentitiesOnly Yes
IdentityFile ~/.ssh/id_gateway

Agora, do seu cliente, você deve conseguir ssh private e entrar diretamente. Isso funciona até mesmo para scp e sftp .

Crédito extra

Se você quiser usar isso para vários servidores, mas quiser apenas gerenciar uma chave pública no gateway, use o seguinte truque. Por padrão, sshd permite que apenas algumas variáveis sejam recebidas do ambiente local. Uma delas é LC_PAPER , que raramente é usada para qualquer coisa. Assim, podemos usá-lo para passar o nome do host do servidor da seguinte forma:

Primeiro, altere a entrada da chave pública para

command="sh -c 'ssh $LC_PAPER ${SSH_ORIGINAL_COMMAND:-}'" ssh-rsa AAAAB3...

Em seguida, no seu cliente, adicione uma função ao seu arquivo .bashrc (ou qualquer shell que você usa) que se pareça com isto:

ssh_proxy() {
  LC_PAPER=$1 /usr/bin/ssh $*
}

Em seguida, crie um alias para se você quiser:

alias ssh=ssh_proxy

Por fim, adicione Host sections ao seu .ssh/config , como mostrado acima. por exemplo:

Host private2
User gateway-user
Hostname xxx.xxx.xxx.xxx
IdentitiesOnly Yes
IdentityFile ~/.ssh/id_gateway

Agora, você deve conseguir fazer ssh private e ssh private2 com apenas uma chave pública no gateway.

    
por 02.06.2015 / 15:00