Eu uso um comando ssh para fazer login em um nó remoto usando um nó intermediário via proxyjump. Os nós remotos e intermediários são servidores Linux e meu cliente é um Macbook. Este comando funciona e se parece com:
ssh -i .ssh/id_file -J user1@jump_node -A -D remote_port user2@remote_node
onde substituo jump_node e remote_node pelos nomes de host dos nós intermediários e remotos e remote_port pela porta sshd em remote_node.
Minha primeira e principal pergunta é: como transformar este comando em uma seção de configuraçãoque posso colocar no meu arquivo .ssh/config? Eu olhei para a página de manual do ssh e não consegui obter as opções de configuração correspondentes para -D
e -A
sinalizadores (acho que ForwardAgent yes
para -A
?). Alguém poderia explicar esses sinalizadores e como criar uma seção de configuração correta com este comando?
Minha outra pergunta é menos importante, mas me ajudaria a entender o que está acontecendo aqui.Esta segunda pergunta é sobre um erro que recebo quando emito um comando ligeiramente diferente.
A maior parte da documentação que li online sugere o uso de um comando como este:
ssh -i .ssh/id_file -J user1@jump_node user2@remote_node:remote_port
mas quando tento este comando (com e sem sinalizador -A
), recebo o seguinte erro:
channel 0: open failed: connect failed: Name or service not known
stdio forwarding failed
kex_exchange_identification: Connection closed by remote host
Connection closed by UNKNOWN port 65535
Não consegui descobrir o que esse erro significa e se ele tem algumas dicas que eu poderia usar?
Responder1
Verman 5 ssh_config
:
ForwardAgent yes
IdentityFile .ssh/id_file
Host jump_node
User user1
Host remote_node
ProxyJump jump_node
User user2
e apenas corra ssh remote_node
.
Você pode até construir uma cadeia dessa forma, se também especificar (outra) ProxyJump
para o jump_node
too.
O segundo problema é que ssh user2@remote_node:remote_port
a sintaxe está incorreta. A mensagem de erro afirma Name or service not known
porque tentou (e falhou) resolver remote_node:remote_port
como um nome de host (sim, com dois pontos incorporados), não remote_node
como você poderia esperar. Tente executar a mesma coisa sem -J
, a mensagem de erro ficará um pouco mais clara.
Eu interpretaria isso como uma tentativa de especificar uma porta onde o servidor SSH está escutando no nó remoto; para isso, use -p
o parâmetro de linha de comando ou Port
a opção de entrada do host em um arquivo de configuração.
Além disso, isso não tem nada em comum com a -D
opção de linha de comando. E o argumento não é uma "porta remota". Em vez disso, essa opção faz algo totalmente diferente, ou seja, faz com que o cliente SSHouvirna porta especificadana máquina locale aceitar conexões SOCKS, e o remoto será usado como nó de saída. Você pode, por exemplo, configurá-lo no navegador local, para que ele acesse a internet através do túnel SSH e terceiros (servidores web) vejam suas conexões como provenientes do IP do host remoto; ninguém verá seu IP "real", exceto o servidor SSH (que neste caso verá o endereço do servidor de salto). Pôressena configuração, você usa DynamicForward
a opção no arquivo de configuração.