Copiando um arquivo usando SSH em um encapsulamento com encaminhamento de certificados

3

Eu preciso encontrar uma maneira de copiar arquivos de mymachine para um servidor priv-server sentado em uma rede NATted privada através de um servidor pub-server com um IP público. A máquina atrás de NAT priv-server tem apenas certificados para user@mymachine , portanto, os certificados precisam ser encaminhados de mymachine via pub-server para priv-server

Então, para fazer logon com o SSH com apenas um comando, eu uso:

$ ssh -tA user@pub-server 'ssh user@priv-server'

- isso funciona perfeitamente bem. Os certificados são encaminhados de mymachine para priv-server via pub-server , e tudo está bem configurado.

Agora, normalmente usaria scp para qualquer necessidade de transferência de arquivos, mas não conheço uma maneira de passar todas as informações de encapsulamento para scp .

    
por Erik Allik 10.11.2014 / 12:33

3 respostas

2

Em vez disso, use uma forma mais simples de copiar arquivos por cat localmente e canalize isso em um comando cat > filename remoto em priv-server :

$ cat file1.txt | ssh -A user@pub-server 'ssh user@priv-server "cat > file1.txt"'

ou com compactação:

$ gzip -c file1.txt | ssh -A user@pub-server 'ssh user@priv-server "gunzip -c > file1.txt"'

Contribuição de man ssh :

-A Enables forwarding of the authentication agent connection. This can also be specified on a per-host basis in a configuration file.

-t Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services. Multiple -t options force tty allocation, even if ssh has no local tty.

Eu inicialmente não estava ciente de uma resposta, mas depois de uma boa noite de sono e escrevendo esta pergunta, eu vi um problema com o comando que eu estava tentando inicialmente, consertei e funcionou. Mas como isso parece ser uma coisa útil, decidi compartilhar a resposta.

    
por 10.11.2014 / 12:35
1

Isso seria simples se você tentar um sshfs nativo que foi adicionado recentemente.

Instale sudo apt-get install sshfs

sshfs -ttA user@pub-server ssh user@priv-server

Isso fará a mágica.

Para mais informações, consulte Linux Journal

    
por 10.11.2014 / 12:45
1

Em vez de pensar em como lidar com uma cadeia complexa de encaminhamentos de SSH, separe os problemas.

  1. Configure seu sistema para ter acesso transparente a todos os hosts. Isso é feito de uma vez por todas no seu arquivo ~/.ssh/config .

    Para ensinar SSH a use uma máquina como proxy para outra máquina , declare um ProxyCommand .

    Host priv-server
    User user
    ProxyCommand ssh -W %h:%p -t user@pub-server
    

    Além disso, habilite o compartilhamento de conexão . Isso permite que várias instâncias de clientes usem o mesmo canal, o que economiza no tempo de estabelecimento da conexão. Na parte superior do seu .ssh/config (antes de qualquer Host line), adicione

    ControlMaster auto
    ControlPath ~/.ssh/control:%h:%p:%r
    
  2. Se puder, configure a autenticação de chaves e o encaminhamento de agentes, para que a autenticação seja totalmente transperente. Se você não puder, então você precisa de autenticação interativa em alguns hosts, você só precisa autenticar uma vez por sessão ou após uma falha de rede. Abra uma conexão mestre.

    ssh -Nf priv-server
    
  3. Chame ssh (ou scp , sftp , sshfs , rsync , etc.) normalmente.

por 11.11.2014 / 02:39