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.