O OpenSSH = 7.2 suporta a expansão do til no lado local para o encaminhamento remoto do socket Unix

1

Estou tentando encaminhar um soquete gpg-agent Unix para uma máquina remota. Eu tentei as duas versões seguintes do comando de encaminhamento remoto:

  • A: ssh -vvv -N -R ~/.gnupg/S.gpg-agent:~/.gnupg/S.gpg-agent.extra {HOST}
  • B: ssh -vvv -N -R ~/.gnupg/S.gpg-agent:/home/{USER}/.gnupg/S.gpg-agent.extra {HOST}

Ambos relatam encaminhamento remoto bem-sucedido após a conexão ssh inicial. No entanto , o soquete da opção A falha com debug1: connect_next: host ~/.gnupg/S.gpg-agent.extra ([unix]:~/.gnupg/S.gpg-agent.extra): No such file or directory quando uma conexão de dados real é tentada na máquina remota com gpg-connect-agent /bye , enquanto o soquete da opção B funciona bem.

Eu quero saber se é possível fazer uma expansão de diretório inicial local com o comando ssh remote forwarding. Se não, por quê?

    
por Tanachat 07.08.2018 / 08:34

2 respostas

2

O ~ deve ser expandido por algum programa. Normalmente este programa é o shell. O daemon sshd não alimenta o caminho para um shell e não expande o caminho.

Mas você não precisa de uma expansão para o diretório inicial dos usuários atuais, pois é o diretório de trabalho de qualquer maneira.

Tente

ssh -vvv -N -R ~/.gnupg/S.gpg-agent:${HOME}/.gnupg/S.gpg-agent.extra {HOST}

Editar:

Isso funciona porque o diretório de trabalho no host (não no cliente) é sempre o diretório inicial do usuário de destino.

O servidor ssh não expande ~ das variáveis de ambiente, mas deve ser possível executar código no host para criar um link ou um link simbólico para um local conhecido que possa ser usado pelo servidor ssh.

Editado como sugerido por Kusalananda

    
por 07.08.2018 / 08:44
1

O comentário não suporta novas linhas, então tive que colocá-las aqui:

  • ssh -vvv -N -R ~/.gnupg/S.gpg-agent:${HOME}/.gnupg/S.gpg-agent.extra {HOST} funciona
  • ssh -vvv -N -R ${HOME}/.gnupg/S.gpg-agent:${HOME}/.gnupg/S.gpg-agent.extra {HOST} funciona
  • ssh -vvv -N -R ~/.gnupg/S.gpg-agent:~/.gnupg/S.gpg-agent.extra {HOST} NÃO funciona
  • ssh -vvv -N -R ${HOME}/.gnupg/S.gpg-agent:~/.gnupg/S.gpg-agent.extra {HOST} NÃO funciona

Como @RalfFriedl explicou em seu comentário (copiado aqui textualmente), "O ${HOME} é substituído pelo shell do cliente. Isso só funciona se $HOME no cliente e $HOME no servidor forem iguais. ~/ é expandido apenas no início de uma palavra, não dentro. Portanto, ~/XX é $HOME/XX , mas XX:~/ é apenas XX:~/ "

Para aqueles que desejam automatizar isso com a palavra-chave RemoteForward no arquivo ssh config, observe que não há expansão de variável, portanto, é necessário usar caminhos absolutos. Sua melhor aposta é criar um link simbólico para um local conhecido e usar esse caminho para o arquivo ssh config. Eu estou usando o mesmo arquivo de configuração em múltiplas plataformas (Ubuntu, Fedora, MacOS, ...), então é isso que eu terei que fazer.

    
por 10.08.2018 / 00:12