Jak skopiować plik bez użycia scp w sesji ssh?

55

Zalogowałem się do systemu za pomocą ssh i w obu systemach nie ma scp. Jak skopiować plik bez korzystania z programu scp.

Talespin_Kit
źródło
Czy netcat (nc) jest obecny w obu systemach? Jeśli tak, użyj sesji ssh do tunelowania portu TCP i użyj nc na tym porcie.
Czy masz rsync?
slhck
3
możesz również to zrobić:ssh user@remotehost cat /path/to/remote/file > /path/to/local/file
n. „zaimki” m.
Wymagane są cytaty @nm (dla mnie, serwer Ubuntu)
Ivan Black
@ nm Nie działa dla mnie - plik jest uszkodzony (chyba komunikat logowania go psuje).
poniedziałek

Odpowiedzi:

94

Aby wysłać plik:

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

Lub:

ssh ajw@dogmatix "cat > remote" < file

Aby otrzymać plik:

ssh ajw@dogmatix "cat remote" > copy
Flexo
źródło
20
@ggg, to wcale nie jest prawda. cd /tmp; cat /bin/bash > test; chmod a+x test; diff test /bin/bash; ./testwszystko działa dobrze. W plikach binarnych nie ma z natury nic „magicznego”. Oba pliki w moim przykładzie są identyczne i mają tę samą sumę kontrolną. To prawda, że ​​kopiowanie i wklejanie z okna terminala nie będzie działać z powodu takich rzeczy, jak sekwencje kontrolne i znaki niedrukowalne, ale przy użyciu takich potoków nigdy nie zbliżają się one do terminala.
Flexo,
@Flexo Potrzebuję czegoś takiego, jedynym wyjątkiem jest to, że muszę przesyłać wszystkie pliki jpg z folderu. Jak można iterować przez / storage / sdcard1 / * jpg i >do plików o tej samej nazwie?
George Profenza
2
@GeorgeProfenza musisz dodać tardo miksu. tar cvf - /path/*.jpg | ssh [email protected] "tar xvf -"lub coś podobnego powinno działać.
Flexo,
Jedną z implikacji tego, co ggg i Flexo mówią powyżej, jest to, że nie można użyć opcji „-t” do ssh.
mjg123
1
Miły! Możesz także użyć pv zamiast pierwszego kota, aby uzyskać pv file | ssh ajw@dogmatix "cat > remote"
pasek
3

Spróbuj tego:

cat myfile.txt | ssh me@otherhost 'cat - > myfile.txt' 
Keith
źródło
2
w ogóle nie ma potrzeby tylu połączeń kotów
Flexo
1

Możesz użyć xxdi niektórych brzydkich cytatów, aby skopiować wiele plików, a także uruchamiać na nich polecenia i wykonywać je:

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
źródło
ah, moja odpowiedź jest zdecydowanie za mała
Aric
-1

Oprócz przesłania pliku do pilota cat, możesz również użyć klienta SFTP do przesłania plików.

salva
źródło
+1, ale należy zauważyć, że OP próbuje uniknąć scp, ponieważ nie istnieje w systemach. Biorąc pod uwagę to ograniczenie, istnieje również prawdopodobieństwo, że serwer FTP musi istnieć po stronie odbierającej, co powoduje, że proces kopiowania zależy od oprogramowania innego niż to, co zwykle jest tam domyślnie.
Paul Sasik
-1

python3 -m http.serverw tym samym katalogu z wybranego pliku - po tym można curlalbo wgetlub pobrać plik przeglądarce. Zauważ, że po uruchomieniu tego polecenia wszystkie twoje pliki z bieżącego katalogu będą publicznie dostępne, dopóki nie naciśniesz Ctrl+ C.

Witalij Zdanevich
źródło