Perguntas como Como gravar remotamente em um arquivo usando SSH são sobre um SSH direto.
Mas estou chegando ao fim de um túnel reverso que termina no servidor intermediário. Ou seja, estou mudando de uma máquina para outra. E eu quero gravar em um arquivo na máquina distante. O seguinte falha; acaba escrevendo no servidor intermediário!
ssh -A -t intermediateserver ssh -A -t -p 666 localhost "echo 30 > tmp"
O fato de haver um túnel ssh reverso lá provavelmente não torna as coisas mais complicadas; portanto, em geral, estou sentado em um servidor doméstico e passando por servidor intermediário para servidor distante.
(No meu caso aqui, o servidor distante parece intermediar internamente o servidor em sua porta 666, devido a um túnel reverso preexistente).
bash
ssh
ssh-tunnel
reverse-tunnel
CPBL
fonte
fonte
ssh
passando de "servidor intermediário" paralocalhost
, ainda está no "servidor intermediário". Onde você está se conectando a uma máquina distante? Você diz que o túnel termina em "servidor intermediário", então qual máquina está mais distante que o fim da linha?Respostas:
Para cada salto, você precisará de uma camada de cotação. Essencialmente,
ssh server some command foo bar
acaba rodando$SHELL
com os argumentos-c
esome command foo bar
, portanto:Isso, por sua vez, significa que operações de shell como expansão variável, redirecionamento e expansão de curingas precisam de citações extras para impedir que shells intermediários atuem neles.
Por exemplo, se eu tivesse os arquivos
foo-a
efoo-?
no meu diretório pessoal:Seria mais simples se você usasse um
ProxyCommand
ouProxyHost
. Isso estabelecerá um túnel entre os dois sistemas, em vez de criar um baklava de shells executando comandos:fonte
"l1 'l2 "l3 'l4' 3" 2' 1"
é visto pela primeira shell como três cordas:l1 'l2 l3
,l4
,3 2' 1
. Pode ser possível obter até três camadas de citações usando barras invertidas também, mas dessa maneira leva à loucura.