O que você quer já está acontecendo, na verdade. E certamente mkdir
não é problema seu - não lê stdin
de qualquer maneira. Esse pipe é herdado como stdin por todos os filhos de ssh
- a menos que você esteja recebendo um pseudo terminal como ssh -t
.
Salvo isso, o problema é que o shell que executa esses comandos é um dos filhos de
ssh
- e parte de sua tarefa é abrir 0,1,2 para cada grupo de comando que ele executa. Sua entrada, então, está apenas se perdendo no shuffle porque está em um descritor comum - o mesmo descritor que o shell reabre para cada um de seus filhos.
E, de maneira mais simples, acho que você pode simplesmente mover a entrada para um descritor diferente de um desses três padrões. Por exemplo, o seguinte funciona para mim:
echo hey there >file
cat file | ssh mikeserv@localhost '
exec 3<&0
mkdir -p .
echo ho there
cat <&3'
Se eu executar o acima, ele imprime:
ho there
hey there
Você também pode encontrar algum utilitário na opção -W
para ssh
. man ssh
diz:
-
-W
host : port - Solicita que a entrada e saída padrão no cliente sejam encaminhadas para host na porta sobre o canal seguro. Implica -N
, -T
, ExitOnForwardFailure
e ClearAllForwardings
. Funciona apenas com a versão 2 do Protocolo