Как скачать файл в сценарии оболочки после подключения к другому серверу через ssh? - PullRequest
2 голосов
/ 18 января 2012

Моя цель:

наличие шеллскрипта для cronjob (на MacOSX Snow Leopard), который подключается к машине Debian с помощью ssh (логин открытого / секретного ключа), выполняет tar команда и загружает tarred файл впоследствии.

Моя проблема:

Вход в систему работает, также выполнение некоторых команд.Но как я могу загрузить файл обратно на локальный компьютер?

Это то, что у меня есть до сих пор:

Это содержимое сценария оболочки до сих пор:

#!/bin/bash
ssh user@remotehost << 'ENDSSH'
tar -C / -czf /home/user/stuff.tar.gz /home/user/stuff
ENDSSH

Ответы [ 6 ]

2 голосов
/ 18 января 2012

Коротко и просто, без heredoc.

ssh -Te none user@remotehost "tar -C / -cz /home/user/stuff" >stuff.tar.gz
1 голос
/ 18 января 2012

Зачем скачивать файл tar, а не создавать содержимое tar на stdout?

Т.е.:

ssh user@machine '(' cd /the/dir '&&' tar cf - list of files ')' >archive.tar
1 голос
/ 18 января 2012

Просто rsync файл после его создания:

#!/bin/bash
ssh user@remotehost tar -C / -czf /home/user/stuff.tar.gz /home/user/stuff
rsync -chavP --stats user@remotehost:/home/user/stuff.tar.gz .

Это делает установление второго подключения к remotehost, но сохранит вас при копировании данных по сети, когда файл не изменился (сильно) с момента последнего архивирования.

1 голос
/ 18 января 2012

это может быть, если вы хотите.

scp stuff.tar.gz user@remotehost:/"directory to place this file"/

1 голос
/ 18 января 2012

Поток обратно.

#!/bin/bash
ssh user@remotehost << 'ENDSSH' > stuff.tar.gz
tar -C / -czf - /home/user/stuff
ENDSSH
0 голосов
/ 31 декабря 2014

I.Как сжимать файлы или папки через SSH

Для разных сжатых форматов вам необходимо использовать разные командные строки:

  1. Zip

Чтобы сжать файлили папку в zip-файле:

zip -r file.zip file
Bz2

Чтобы сжать файл (ТОЛЬКО) в файл bz2:

Bzip2 -zk file
GZ

Чтобы сжать файл (ТОЛЬКО) в файл gz:

gzip -c file > file.gz

Кстати, вам нужно изменить указанный выше "файл" на файлимя с расширением (если есть), которое вы хотите сжать, в то время как вы можете заменить следующие «xxx» на любые ключевые слова:

Tar

Чтобы сжать один файл или папку в файл tar:

tar -cvf xxx.tar file

Чтобы сжать несколько файлов и / или папок в файл tar:

tar -cvf xxx.tar file1 file2 folder1 folder2 ...
Tar.bz2

Чтобы сжать один файл или папку в файл tar.bz2:

tar -cvjf xxx.tar.bz2 file

Чтобы сжать несколько файлов и / или папок в tar.bz2файл:

tar -cvjf xxx.tar.bz2 file1 file2 folder1 folder2 ...
Tar.gz

Чтобы сжать один файл или папку в файл tar.gz:

tar -cvzf xxx.tar.gz file

Чтобы сжать несколько файлов и / или папок в файл tar.gzфайл:

tar -cvzf xxx.tar.gz file1 file2 folder1 folder2 ...

II.Как извлечь файл через SSH

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

  1. Zip

Чтобы извлечь zip-файл:

unzip file.zip
Bz2

Чтобы извлечь файл bz2:

bunzip2 file.bz2 
GZ

Чтобы извлечь файл gz:

gzip -d file.gz 
Tar

Чтобы извлечь файл tar:

tar -xvf file.tar
Tar.bz2

Чтобы извлечь файл tar.bz2:

tar -xvjf file.tar.bz2 
Tar.gz

Чтобы извлечь файл tar.gz:

tar -xvzf file.tar.gz 

Кстати, вам необходимо заменить вышеуказанные «файлы» сжатых файловс реальными именами файлов.

Бонус:

Помимо удаленных серверов, указанные выше командные строки также доступны для компьютера Mac OS с приложением Terminal.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...