Estou tentando criar um túnel ssh para acessar um servidor remoto (A) que só pode ser acessado através de outro servidor (B). Eu tenho uma chave na minha máquina local (L) para chegar ao servidor de retransmissão (B) e outra chave no servidor de retransmissão (B) para chegar ao servidor de destino (A).
[máquina local (L) com chave para o servidor de retransmissão (B)] --> [servidor de retransmissão (B) com chave para o servidor de destino (A)] --> [servidor de destino (A)]
Eu tenho um arquivo ~/.ssh/config parecido com este na minha máquina local (L):
Host relay.server(B)
Hostname relay.server
Port 22
User me
IdentityFile ~/.ssh/id_rsa
Host destination.server(A)
Hostname destination.server
Port 1122
User me
IdentityFile ~/.ssh/id_rsa
E posso fazer meu túnel funcionar perfeitamente com o seguinte:
executando o comando: ssh -N -L 1122:SERVER_PRIVATE_IP:22 relay.server(B)
na minha máquina local (L). Isso me solicita uma senha para desbloquear a primeira chave e depois parece travar, não retorna um prompt, usando a -f
opção ou terminando com um &
me impede de digitar a senha. No entanto, se eu usar ^C
esse comando depois de inserir a senha e, em seguida, inserir, ssh destination.server(A)
recebo uma solicitação para fornecer uma senha para desbloquear a segunda chave, após a qual estou conectado ao servidor de destino (A).
Estou procurando um único comando que me permita conectar-me ao servidor de destino (A) da minha máquina local (L) e solicitará que eu forneça as senhas necessárias para desbloquear cada chave. Ou uma sugestão de uma forma alternativa de organizar as coisas para que eu possa me conectar diretamente ao servidor de destino (A) da minha máquina local (L) através do servidor de retransmissão (B).
Responder1
A resposta curta é que você precisa
ProxyCommand
usandonc
para se conectar atravésForwardAgent
para passar chaves- garanta que sua chave pública faça parte de
.ssh/authorized_keys
todos os servidores
Host relay Hostname relay.server.fqdn.or.IP User me IdentityFile ~/.ssh/id_rsa ForwardAgent yes Host destination Hostname destination.server.fqdn.or.IP User me IdentityFile ~/.ssh/id_rsa ProxyCommand ssh -q relay "nc %h %p" ForwardAgent yes
A porção mais longa.
A ProxyCommand
opção em ssh config executa um comando sempre que esse fechamento Host
é usado. É normalmente usado nc
disponível em nmap.org, também conhecido como ncat
e tem muitas opções.
Na Host destination
entrada acima da configuração do ssh, ProxyCommand
foi definido ssh -q relay "nc %h %p"
o que diz, ssh para retransmitir silenciosamente e executar nc destination.server.fqdn.or.IP 22
.
nc
faz a conexão entre o ssh de entrada e o destino.
Diz ao ForwardAgent yes
ssh para adicionar a chave a um agente ssh. Os agentes ssh controlam as chaves e são usados para passar automaticamente a chave certa para um host, conforme necessário. O ForwardAgent yes
informa ao agente para passar a chave para outro agente na retransmissão e depois novamente para o destino.
Agora, para que tudo isso funcione, cada servidor pelo qual você passa e, finalmente, o destino deve ter a chave pública associada à sua chave privada (id_rsa) em seu .ssh/authorized_keys
arquivo. Quando você criou sua chave privada, id_rsa, uma chave pública, id_rsa.pub, também deveria ter sido criada.
Se você não tiver sua chave pública, poderá obtê-la a partir da chave privada ssh-keygen -y -f ~/.ssh/id_rsa
para copiar/colar facilmente. Observe que a chave pública possui 2 ou 3 campos separados por espaços, mas éumlinha.
Então, ssh relay
edite ~/.ssh/authorized_keys
(que pode não existir, então mkdir -p ~/.ssh
pode ser necessário) e cole a chave pública em uma nova linha (ou na primeira se não estiver presente).
Enquanto estiver no servidor de retransmissão, verifique se nc
existe em /bin ou /usr/bin. Caso contrário, você precisará instalá-lo usando seu gerenciador de pacotes, yum ou apt-get.
No servidor de retransmissão, ssh destination
faça a mesma atualização do ~/.ssh/authorized_keys
.
exit
até sua máquina local, e você deverá ser capaz dessh destination
Responder2
Versões mais recentes do OpenSSH ProxyJump
permitem .ssh/config
:
Host relay
Hostname relay.server.fqdn.or.IP
User me
IdentityFile ~/.ssh/id_rsa
ForwardAgent yes
Host destination
Hostname destination.server.fqdn.or.IP
ProxyJump relay
User me
IdentityFile ~/.ssh/id_rsa