SSH para vários servidores [Acesso negado]

2

Eu preciso escrever um script para conectar remotamente de casa ao meu servidor universitário via ssh e, em seguida, do terminal do servidor, ssh para uma máquina virtual para processar alguns dados. Isso é possível?

Isso é o que eu tentei até agora:

#!/usr/bin/expect
set login "myuser"
set addr "test.ac.uk"
set addr2 "t002"
set pw "mypassword"

spawn ssh -o StrictHostKeyChecking=no $login@$addr 
expect "$login@$addr\'s password:"
send "$pw\r"
expect "#"
spawn ssh -o StrictHostKeyChecking=no $login@$addr2 -p 22
expect "$login@$addr2\'s password:"
send "$pw\r"
expect "#"
send "cd /developer\r"
interact

Erro : ssh: conectar-se ao host t002 porta 22: Conexão recusada

Esta é a maneira como estou fazendo login manualmente a partir de casa com êxito:

~/Desktop # ssh host

prompt para inserir a senha.

Uma vez logado com sucesso.

-bash-4.2$ ssh user@t002

solicitará a senha novamente.

EDIT: Eu atualizei a segunda linha ssh como sugerido por Mike.

De:

spawn ssh -o StrictHostKeyChecking=no $login@$addr2 -p 22

Para:

send "ssh -o StrictHostKeyChecking=no $login@$addr2 -p 22\r"

Agora, o script retorna o acesso negado, mas, ao mesmo tempo, faz login no servidor, mas não na máquina virtual.

    
por user2023 22.11.2018 / 18:57

3 respostas

3

É um problema comum que você deseja obter para um servidor que não seja diretamente acessível a partir da Internet externa, mas é acessível a partir de um host intermediário exposto publicamente. (O host intermediário é chamado de jumpbox .)

Como esse problema é tão comum, é natural que o OpenSSH forneça métodos convenientes que simplifiquem o trabalho com jumpboxes (ou jumpboxen?). Existem dois caminhos, um caminho antigo e um novo caminho. O modo antigo ainda funciona, mas a nova maneira é mais intuitiva e faz menos suposições sobre quais aplicativos estão disponíveis no Jumpbox.

Usando as máquinas de exemplo mencionadas na pergunta, isso pode ser feito da seguinte forma:

ssh -o StrictHostKeyChecking=no -o [email protected] myuser@t002

Ou, em vez de -o [email protected] , acho que -W [email protected] é equivalente.

De qualquer forma, esse método requer uma versão nova o suficiente do OpenSSH. Se você ficar preso a uma versão antiga, precisará fazer algo assim:

ssh -o StrictHostKeyChecking=no -o ProxyCommand='ssh [email protected] "nc %h %p"' myuser@t002

A maneira antiga pressupõe que você tenha o netcat instalado no Jumpbox.

Outro benefício da nova maneira é que você não precisa manter uma chave privada na caixa de entrada. ProxyJump é inteligente o suficiente para tentar usar a chave privada que você tem localmente. Então, se o salto estiver comprometido, não será necessário comprometer nada por trás do salto.

Agora, você pode ficar cansado de escrever esse grande comando todas as vezes. Quanto mais você usar o ssh, mais incentivo terá para configurar um $HOME/.ssh/config . Esse é um arquivo no qual você pode fornecer aliases a hosts remotos e associar configurações específicas a esses hosts.

Para o seu exemplo, um ssh_config seria configurado da seguinte forma:

Host jumpbox
User myuser
Hostname test.ac.uk
StrictHostKeyChecking=no

Host t002
User myuser
StrictHostKeyChecking=no
ProxyJump jumpbox

Com essa configuração no lugar, você deve ser capaz de logar em t002 usando um comando muito mais simples:

ssh t002

Há muitas outras coisas legais que você pode fazer com um ssh_config. Dê uma olhada em man ssh_config e visite-a de vez em quando enquanto aprende mais sobre o ssh. Você vai continuar encontrando mais coisas legais que você pode fazer:)

Um passo a passo introdutório de exemplo para configurar uma configuração ssh é link

    
por 22.11.2018 / 23:15
1

Você gera um novo ssh. Experimente:

send "ssh -o StrictHostKeyChecking=no $login@$addr2 -p 22\r"
    
por 22.11.2018 / 20:43
1

Gostaria apenas de usar um comando em um script para reduzir a digitação e digitar os credenciais de usuário!

#!/bin/bash
ssh -o StrictHostKeyChecking=no [email protected] 'ssh -o StrictHostKeyChecking=no myuser@t002'

Adapte-se às suas necessidades.

ssh -o StrictHostKeyChecking=no [email protected] 'ssh -tt -o StrictHostKeyChecking=no myuser@t002'

Copie a chave do primeiro servidor para o seu PC e faça o seguinte:

ssh -o StrictHostKeyChecking=no [email protected] 'ssh -tt -o StrictHostKeyChecking=no -i /ssh/1stserverkey myuser@t002'
    
por 22.11.2018 / 19:20

Tags