SCP através da conexão do gateway SSH


8

Meu layout de rede é mais ou menos assim:

Agora Alice tem acesso ao gateway SSH (apenas gateway de agora em diante) com:

ssh alice@external.ip

e o arquivo de chaves autorizadas no gateway se parece com isso

#/home/Alice/.ssh/authorized_keys
command="ssh -t alice@web" ssh-rsa ABCD...E== alice@somehost

portanto, quando Alice tenta se conectar ao Gateway com sua chave privada, na verdade, ela se conecta ao servidor da Web (o pc do gateway pode fazer uma conexão ao servidor da Web com uma chave privada sem senha, para que fique transparente).

A questão

  1. Como posso configurar isso para que Alice também possa enviar scp para o servidor da web?

  2. Eu sei que isso faz uma conexão separada, mas existe alguma maneira de isso funcionar como um ssh normal, para que até algo assim -R12345:localhost:22funcione?

Respostas:


10

Se você deseja acessar um servidor ssh atrás de outro servidor ssh, basta usar "ProxyCommand". Exemplo: adicionar ao .ssh / config

Host Alice  
   User myLoginAtAlice # optional 
   ProxyCommand ssh -o Compression=no gateway netcat -w 90 %h %p
   ServerAliveInterval 30
   Compression yes

Host gateway
   HostName gateway.public.ip
   User myLoginAtTheGateway # optional 
   Compression yes

Então, você pode simplesmente "ssh Alice" ou "rsync" ou "scp" diretamente usando "Alice" como nome do host. A mágica está oculta para o cliente.

Isso permite que você reconfigure rapidamente seu ssh, caso sua topologia / configuração de rede seja alterada, e apenas altere o .ssh / config, em vez de alterar todos os scripts.

Explicação: O ssh usa o comando fornecido como "comando proxy" como transporte, em vez de uma conexão TCP direta. O Netcat é uma ferramenta de rede que (entre milhões de outros recursos) simplesmente redireciona seu stdin / stdout para o host remoto especificado. Portanto, "ssh gateway nc sshserver 22" conecta você ao servidor ssh dessa máquina. % h é o nome do host e% p é a porta. Essa configuração permite especificar "Porta N" para alterar a porta sem alterar a linha ProxyCommand.

Ativo a compactação no computador final e desabilito a compactação externa, pois a compactação de dados criptografados ou compactados não reduz mais o volume de dados. Qualquer brincadeira com as configurações de compactação também é obviamente opcional.


Mais uma pergunta, o rysnc não funciona assim se eu tiver uma porta personalizada para a máquina de gateway. Qualquer pensamento sobre isso.
Zidarsk8

Adicione "Port port_number" à seção relevante do .ssh / config. Por favor, leia as páginas de manual ssh_config e sshd_config. São muitas informações e podem trazer muita inspiração.
Raúl Salinas-Monteagudo

Eu quis dizer, o rsync não funciona se uma porta diferente for especificada. Eu configurei a porta para que a conexão funcione normalmente, mas o rsync está me causando problemas.
Zidarsk8

3

Eu tinha exatamente o mesmo problema, mas consegui funcionar sem mudar radicalmente tudo.

Tudo o que fiz foi adicionar $ SSH_ORIGINAL_COMMAND ao gateway allowed_keys para passar por qualquer coisa da cadeia até o servidor final.

Então, é isso:

#/home/Alice/.ssh/authorized_keys
command="ssh -t alice@web" ssh-rsa ABCD...E== alice@somehost

Torna-se:

#/home/Alice/.ssh/authorized_keys
command="ssh -q -t alice@web $SSH_ORIGINAL_COMMAND" ssh-rsa ABCD...E== alice@somehost

O -q é usado para suprimir a mensagem de conexão fechada da máquina do terminal, para que não termine na saída local se estiver usando o redirecionamento localmente.

Você pode usar o scp assim:

scp localFileName alice@exernal.ip:/path/on/end/point/remoteFileName

Isso tem a vantagem adicional de permitir que os usuários passem comandos através de comandos para o servidor de terminal e recuperem o resultado em sua sessão local para que possam redirecioná-los para um arquivo ou canalizá-los para um programa diferente.

Por exemplo:

ssh -t alice@external.ip "ls -l" > tmp

Isso funciona porque parece que o sshd preenche a variável de ambiente $ SSH_ORIGINAL_COMMAND com o comando e especificado pelo cliente ssh, mas não sei por que isso milagrosamente permite que o scp passe pela máquina do terminal, bem como pelos comandos.


0

Infelizmente, o encaminhamento de porta não ajudaria a copiar arquivos diretamente da estação de trabalho de Alice para o servidor da Web usando scp. Em este post SO I explicou por ssh (e scp como ele utiliza os mesmos mecanismos de autenticação) não funcionará para conexões de porta-encaminhada usando ssh.

A opção seria configurar um servidor VPN na máquina que agora atua como gateway SSH, conectar-se a ele e ter acesso direto a qualquer máquina atrás do firewall.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.