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.


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

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 foo@bar.com "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' 

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
"

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.


+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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.