Tenho um Jump Server e um Target Server aos quais gostaria de me conectar como este
myPc > JumpServer > TargetServer
no primeiro passo eu posso fazer ssh-keygen para pular a autenticação de senha, no entanto quando no passo 2, devido a questões de segurança, ssh-keygen não foi instalado e eu não posso fazer nada sobre isso. Então eu estava pensando em passar a senha em um único comando no meu PC. O que eu tentei até agora:
sshpass -p myPassword ssh -At username@JumpServer ssh -A username@targetServer
ssh -J username@JumpServer username@targetServer
Mas nenhuma funciona, algum conselho?
Primeiro decida se você quer fazer daisy-chain
ssh
s ou se quer que "nested tubes"ssh -J
lhe dê. Leia esta minha resposta para ver o que quero dizer. Você tentou ambos e não está claro qual você quer. Em geralssh -J
é melhor (por exemplo, encaminhamento de porta ou alocação de um tty é mais simples do que no caso daisy-chain).Se você quiser
ssh -J
(eu recomendo isso), então somente as chaves disponíveis para seu localssh
importarão. Nenhum cliente SSH será invocado no host de salto. Suas chaves privadas (se houver) armazenadas no host de salto serão irrelevantes, então o fato de você não poder executá-lasssh-keygen
lá para criá-las não importa; elas não seriam úteis de qualquer maneira. Sua identidade local pode ser usada para autenticá-lo no host de salto e no servidor de destino. Eu presumo que você tenha executadossh-keygen
localmente. Primeiro registre sua chave no host de salto executando o seguinte comando localmente:Então use o jump host para conectar-se ao servidor de destino e registrar sua chave lá. Execute isto localmente:
Nota
ssh -J …
é um atalho para especificarssh -o ProxyJump=…
, mas comossh-copy-id
não suporta-J
, tivemos que usar outra sintaxe aqui.Agora, se ambos os servidores estiverem configurados para permitir autenticação baseada em chave, você poderá fazer isso
ssh -J username@JumpServer username@targetServer
a partir da sua máquina local.Se você quiser encadear
ssh
s, então é razoável ter uma chave privada no host de salto e usá-la para autenticar aossh
fazer ing no servidor de destino. Eu entendo que você não pode executarssh-keygen
no host de salto. Você ainda pode criar uma chave localmente, registrá-la no servidor de destino e mover (ou copiar) o par de chaves para o host de salto, então os arquivos estarão lá como se você os tivesse criado lá comssh-keygen
.Em geral, cada servidor SSH pode ser configurado para proibir certas coisas e isso pode limitar suas opções ou impor certas ações. Por exemplo, se você conseguiu fazer o host de salto aceitar sua chave, mas o servidor de destino pede a senha não importa o que aconteça, então este comando local será útil:
(Essa ideia já foi postada em um comentário.)
Notas:
sshpass -f…
deve ser preferido asshpass -p…
.sshpass
qual prompt esperar ( por exemplo ).