Если ответ @Maciej и @Gilles не решает Вашу проблему, и Вы не распознаете процесс (и выяснение, что это с Вашим дистрибутивом, не поднимает ответы). Проверьте на Руткит и любые другие знаки, что Вы принадлежали. Руткит более, чем способен к препятствованию тому, чтобы Вы уничтожили процесс. На самом деле многие способны к препятствованию тому, чтобы Вы видели их. Но если они забывают изменять 1 небольшую программу, они могли бы быть определены (например, они изменили top
, но нет htop
). Скорее всего, дело обстоит не так, но лучший сейф, чем извините.
ИСПРАВЛЕННЫЙ: Я первоначально утверждал неправильно, что OpenSSH не поддерживал put -r
. Это делает, но это делает это очень странным способом. Это, кажется, ожидает, что целевой каталог уже будет существовать с тем же именем как исходный каталог.
sftp> put -r source
Uploading source/ to /home/myself/source
Couldn't canonicalize: No such file or directory
etc.
sftp> mkdir source
sftp> put -r source
Uploading source/ to /home/myself/source
Entering source/
source/file1
source/file2
То, что является особенно странным, - то, что это даже применяется, если Вы даете другое имя для места назначения:
sftp> put -r source dest
Uploading source/ to /home/myself/dest
Couldn't canonicalize: ...
sftp> mkdir dest
sftp> put -r source dest
Uploading source/ to /home/myself/dest/source
Couldn't canonicalize: ...
sftp> mkdir dest/source
sftp> put -r source dest
Uploading source/ to /home/myself/dest/source
Entering source/
source/file1
source/file2
Для лучше реализованного рекурсивного put
, Вы могли использовать PuTTY psftp
инструмент командной строки вместо этого. Это находится в putty-tools
пакет под Debian (и наиболее вероятная Ubuntu).
Поочередно, Filezilla сделает то, что Вы хотите, если Вы хотите использовать GUI.
Вы могли бы интересоваться использованием rsync
вместо этого. Команда для этого была бы
rsync --delete --rsh=ssh -av bin/ remote-ip-or-fqdn:/home/earlz/blah/bin/
Это скопирует все в bin/
и поместите его в на удаленном сервере в /home/earlz/blah/bin/
. Как дополнительное преимущество, это сначала проверит, чтобы видеть, не изменился ли файл на удаленной стороне, и если это не имеет, это не снова пошлет его. Кроме того, можно добавить-z опцию, и она сожмет его для Вас.
sftp
команда и протокол. rsync
не поддерживает sftp
- протокол.
– Tino
03.05.2016, 15:07
Я могу предложить несколько сложный ответ, без архивирования, но включая tar?
Здесь мы идем:
tar -cf - ./bin | ssh target.org " ( cd /home/earlz/blah ; tar -xf - ) "
Это упакует каталог./bin tar (-cf: = создайте файл), имя файла - (ни один, stdout), и передайте его по каналу посредством ssh-команды на target.org (который мог бы также быть IP), где команда в кавычках выполняется, который является: CD, чтобы болтать, и смолить-xf (извлекают файл) - ни один, никакое имя, просто stdin.
Это - как будто Вы упаковываете пакет дома, приносите его к сообщению, затем ездите на работу, где Вы ожидаете пакет и открываете его.
Возможно, существует намного более изящное решение, которое просто использует sftp.
tar
очень хорошее решение, однако этому нужно ssh
войдите в поддержку (sftp
другой протокол сверху ssh
). tar
, в отличие от других, по умолчанию, выполнения рекурсивно, передает все специальные файлы (FIFO, блок/устройства посимвольного ввода-вывода и т.д.), пытается перевести UID/GID, отображающийся от источника до целевой системы, и имеет традиционную короткую командную строку. (Одно исключение, хотя: "Сокеты домена Unix" не передаются. Но кому нужны они?)
– Tino
03.05.2016, 15:22
pv
инструмент для наблюдения скорости в длинном
– Felipe Alcacibar
03.05.2017, 17:40
Я не знаю, почему sftp делает это, но Вы можете только рекурсивная копия, если целевой каталог уже существует. Сделайте это...
sftp> mkdir bin
sftp> put -r bin
Самый простой подход заключается в том, чтобы просто сохранить сценарий python как, например, script.py
, а затем вызвать его из сценария bash, или вызвать после сценария bash:
#!/usr/bin/env bash
echo "This is the bash script" &&
/path/to/script.py
Или
script.sh && script.py
-121--32233- Вы можете использовать heredoc, если хотите сохранить источник сценариев bash и python Например, укажите, что ниже указано содержимое файла с именем pyinbash.sh
:
#!/bin/bash
echo "Executing a bash statement"
export bashvar=100
cat << EOF > pyscript.py
#!/usr/bin/python
import subprocess
print 'Hello python'
subprocess.call(["echo","$bashvar"])
EOF
chmod 755 pyscript.py
./pyscript.py
Теперь при запуске pyinbash.sh
появится:
$ chmod 755 pyinbash.sh
$ ./pyinbash.sh
Exe
-121--32231- lcd
: локальная папка (с вложенными папками)
cd
: удаленная папка
put -r.
Вы можете использовать rsync, который является очень мощной альтернативой scp и sftp, особенно при обновлении копий с машины A на машину B, поскольку он не копирует файлы, которые не были изменены; он также может удалять файлы с машины B, которые были удалены с машины A (конечно, только когда ему говорят об этом).
например:
rsync -zrp /home/a/ user@remote.host.com:/home/b/
Опция -r предназначена для рекурсивного копирования файлов, -z включает сжатие при передаче, а -p сохраняет разрешения файлов (создание, редактирование и т.д.) при копировании, чего scp не делает AFAIK. Возможно множество других опций; как обычно, читайте man-страницы.
Оригинальный ответ Karolos
Войдите на удаленный сервер с помощью ssh, используйте sftp для обратного подключения к вашему ящику, затем используйте команду get -r
для передачи каталоги на удаленный сервер.
Команда get позволяет вам передавать каталоги рекурсивно, не создавая каталог.
ssh remote ip
sftp local ip
get -r whichever-dir
Случай SFTP:
Мне нужно было скопировать эту структуру на мой ftp:
mainfolder --- folder --- subfolder
| |
file1.txt file2.txt
Это решило мою проблему:
cd ./mainfolder
mkdir folder
put -r /from/source/folder/* /mainfolder/folder/
cd ./folder
mkdir subfolder
put -r /from/source/folder/subfolder/* /mainfolder/folder/subfolder/
Я только что узнал из Arch Linux Wiki , что можно смонтировать общий ресурс sftp -с помощью sshfs. Я запускаю сервер sftp -с chroot и джейлом , и sshfs работает очень хорошо.
sshfs <sftpuser>@<server>:<read/writable/directory> <your/local/mount/directory>
fusermount -u <your/local/mount/directory>
sftp
позволяетput -r
от OpenSSH 5.4 – Tino 03.05.2016, 15:04