Configuração local do Bastion Host do servidor gateway

Configuração local do Bastion Host do servidor gateway

Quero fazer 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? Tentei várias iterações do ProxyCommand sem sorte. 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 privados, mas não quero isso:

http://www.lorrin.org/blog/2014/01/10/one-liner-ssh-via-jump-box-using-proxycommand/

Responder1

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

Em seguida, no gateway, use a command=sintaxe em seu arquivoauthorized_keys. Por exemplo, sua entrada pode ser assim:

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

Pesquise na página de manual do sshd para command="command"obter mais informações. Certifique-se de adicionar a chave id_gateway.pub a esta linha. Em seguida .ssh/config, no 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 privateentrar diretamente. Isso funciona até para scpe sftp.

Crédito extra

Se quiser usar isso para vários servidores, mas quiser gerenciar apenas uma chave pública no gateway, você pode usar o seguinte truque. sshdpor padrão, permite apenas que certas variáveis ​​sejam recebidas do ambiente local. Um deles é LC_PAPERque raramente é usado para alguma coisa. Portanto, 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 .bashrcarquivo (ou qualquer shell que você use) semelhante a esta:

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

Em seguida, crie um alias para, se desejar:

alias ssh=ssh_proxy

Por fim, adicione Hostseções .ssh/configcomo a mostrada 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 privateisso ssh private2com apenas uma chave pública no gateway.

informação relacionada