Как скопировать файл без использования scp внутри сессии ssh?

55

Я вошел в систему с помощью ssh, и в обеих системах отсутствует scp. Как скопировать файл без использования программы scp.

Talespin_Kit
источник
Netcat (nc) присутствует в обеих системах? Если это так, используйте сеанс ssh для туннелирования порта TCP и используйте nc на этом порту.
У тебя есть rsync?
Slhck
3
Вы также можете сделать это:ssh user@remotehost cat /path/to/remote/file > /path/to/local/file
п. местоимения м.
@nm цитаты обязательны (для меня, сервер Ubuntu)
Иван Блэк
@nm не работает для меня - файл поврежден (я думаю, что сообщение входа в систему нарушает его).
monnef

Ответы:

94

Чтобы отправить файл:

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

Или же:

ssh ajw@dogmatix "cat > remote" < file

Чтобы получить файл:

ssh ajw@dogmatix "cat remote" > copy
Flexo
источник
20
@ggg это совсем не так. cd /tmp; cat /bin/bash > test; chmod a+x test; diff test /bin/bash; ./testвсе работает отлично. В бинарных файлах нет ничего по сути "волшебного". Оба файла в моем примере сравниваются идентично и имеют одинаковую контрольную сумму. Это правда, что копирование и вставка из окна терминала не будут работать из-за таких вещей, как управляющие последовательности и непечатаемые символы, но при использовании таких каналов, как этот, они никогда не подходят к терминалу.
Флекс
@Flexo Мне нужно что-то вроде этого, единственное исключение, мне нужно передать все JPG из папки. Как можно перебирать / storage / sdcard1 / * jpg и >файлы с таким же именем?
Георгий Профенца
2
@ GeorgeProfenza вам нужно добавить tarв микс. tar cvf - /path/*.jpg | ssh foo@bar.com "tar xvf -"или что-то подобное должно работать.
Флексо
Одним из следствий того, что ggg и Flexo говорят выше, является то, что вы не можете использовать опцию "-t" для ssh.
mjg123
1
Приятно! Вы также можете использовать pv вместо первого кота, чтобы получить индикатор прогресса, напримерpv file | ssh ajw@dogmatix "cat > remote"
Theolodus
3

Попробуй это:

cat myfile.txt | ssh me@otherhost 'cat - > myfile.txt' 
Кит
источник
2
не нужно столько кошачьих звонков
Flexo
1

Вы можете использовать xxdи некоторые уродливые цитаты, чтобы скопировать несколько файлов, а также запустить команды для них и выполнить их:

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
"
Арик
источник
ах, мой ответ явно слишком слабый
Арик
-1

Помимо catпередачи файла на удаленный компьютер , вы также можете использовать некоторый SFTP-клиент для передачи файлов.

Сальва
источник
+1, но следует отметить, что OP пытается избежать scp, потому что он не существует в системах. Учитывая это ограничение, также вероятно, что на принимающей стороне должен существовать FTP-сервер, что делает процесс копирования зависимым от программного обеспечения, отличного от того, которое обычно используется по умолчанию.
Пол Сасик,
-1

python3 -m http.serverв том же каталоге с нужным файлом - после этого вы можете curlили wgetили загрузить файл с помощью браузера. Обратите внимание, что с помощью этой команды все ваши файлы из текущего каталога будут общедоступны, пока вы не нажмете Ctrl+ C.

Виталий Зданевич
источник