Como copiar um arquivo sem usar scp dentro de uma sessão ssh?

55

Eu entrei em um sistema com ssh e não há scp presente nos dois sistemas. Como copiar um arquivo sem usar o programa scp.

Talespin_Kit
fonte
O netcat (nc) está presente nos dois sistemas? Se for, use sua sessão ssh para encapsular uma porta TCP e use nc nessa porta.
Você tem rsync?
slhck
3
você também pode fazer isso:ssh user@remotehost cat /path/to/remote/file > /path/to/local/file
n. 'pronomes' m.
citações @nm necessários (para mim, servidor Ubuntu)
Ivan Preto
@nm Não funciona para mim - o arquivo está corrompido (acho que a mensagem de login o quebra).
monnef

Respostas:

94

Para enviar um arquivo:

cat file | ssh ajw@dogmatix "cat > remote"

Ou:

ssh ajw@dogmatix "cat > remote" < file

Para receber um arquivo:

ssh ajw@dogmatix "cat remote" > copy
Flexo
fonte
20
@ggg isso não é verdade. cd /tmp; cat /bin/bash > test; chmod a+x test; diff test /bin/bash; ./testtudo funciona bem. Não há nada inerentemente "mágico" nos arquivos binários. Ambos os arquivos no meu exemplo compararam idênticos e têm a mesma soma de verificação. É verdade que copiar e colar de uma janela de terminal não funcionará por causa de coisas como sequências de controle e caracteres não imprimíveis, mas usar tubos como esse nunca chega perto de um terminal.
Flexo
@ Flexo Eu preciso de algo parecido com isto, a única exceção é que eu preciso canalizar todos os jpg de uma pasta. Como iterar através de / storage / sdcard1 / * jpg e >em arquivos com o mesmo nome?
George Profenza
2
@GeorgeProfenza você precisará adicionar tarà mistura. tar cvf - /path/*.jpg | ssh [email protected] "tar xvf -"ou algo semelhante deve funcionar.
Flexo
Uma implicação do que o ggg e o Flexo dizem acima é que você não pode usar a opção "-t" no ssh.
mjg123
11
Agradável! Você também pode usar pv em vez do primeiro gato de modo a obter uma barra de progresso, por exemplopv file | ssh ajw@dogmatix "cat > remote"
Theolodus
3

Tente o seguinte:

cat myfile.txt | ssh me@otherhost 'cat - > myfile.txt' 
Keith
fonte
2
não há necessidade de que muitas chamadas de gato em tudo
Flexo
1

Você pode usar xxdalgumas citações feias para copiar vários arquivos, além de executar comandos neles e executá-los:

ssh -t foo@bar.com "
echo $'"$(cat somefile | xxd -ps)"' | xxd -ps -r > "'somefile'"
chmod +x somefile
echo $'"$(cat someotherfile | xxd -ps)"' | xxd -ps -r > "'someotherfile'"
chmod +x someotherfile
./somefile
./someotherfile
"
Aric
fonte
ah, minha resposta é claramente demais l33t
Aric
-1

Além de enviar o arquivo para um controle remoto cat, você também pode usar algum cliente SFTP para transferir os arquivos.

salva
fonte
+1, mas deve-se observar que o OP está tentando evitar o scp porque ele não existe nos sistemas. Dada essa restrição, também é provável que um servidor FTP precise existir no lado receptor, o que torna o processo de cópia dependente de software diferente do que normalmente existe por padrão.
Paul Sasik 5/05
-1

python3 -m http.serverno mesmo diretório com o arquivo desejado - depois disso, você pode curlou wgetou baixar um arquivo com o seu navegador. Observe que, com esse comando em execução, todos os seus arquivos do diretório atual estarão disponíveis ao público, até você pressionar Ctrl+ C.

Vitaly Zdanevich
fonte