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.