Làm cách nào để tạo tar lưu tệp lưu trữ trên máy từ xa bằng sftp hoặc ftp?


10

Tôi muốn sao lưu một số dữ liệu rất quan trọng của tôi trên một máy từ xa.
Hiện tại tôi chỉ lưu nó vào máy cục bộ của mình bằng cách sử dụng lệnh này:tar -cvjf ~/backups/Backup.tar.bz2 ~/importantfiles/*

Tôi không muốn sử dụng một lệnh khác để chuyển nó sang máy từ xa, nghĩa là tôi muốn nâng cấp lệnh này để nó có thể chuyển dữ liệu sang máy từ xa.

Điều này được thiết kế để trở thành một tập lệnh sau này được cho là tự chạy, có nghĩa là bất kỳ loại đầu vào người dùng cần thiết nào cũng sẽ hoàn toàn làm hỏng nó!

Cái gì đó như

tar -cvjf sftp://user:pwassword@host/Backup.tar.bz2 ~/importantfiles/*
tar -cvjf  ftp://user:pwassword@host/Backup.tar.bz2 ~/importantfiles/*

sẽ là hoàn hảo (Không có đường ống (v.v.), chỉ một lệnh!)


cần phải là ftp? Bạn không có sshquyền truy cập vào máy này?
terdon

Tôi không có quyền truy cập ssh vào máy. Nó chỉ là một máy chủ dự phòng tôi thuê. Vì vậy, được ftp hoặc sftp.
BrainStone

@BrainStone SFTP là một phần của SSH
kurtm

Tôi biết. Nhưng nó được thiết lập theo cách mà mọi kết nối ssh bị đóng ngay lập tức. SFTP hoạt động mặc dù. Tôi biết đó là một thiết lập wierd nhưng đó là như vậy.
BrainStone

1
SFTP khả dụng khi SSH không hoạt động nếu họ đang sử dụng máy chủ nội bộ sftp và trình bao của bạn được đặt thành / sbin / nologin.
Gregg Leventhal

Câu trả lời:


15

Đối với SSH:

tar czf - . | ssh remote "( cd /somewhere ; cat > file.tar.gz )"

Đối với SFTP:

outfile=/tmp/test.tar.gz
tar cvf $outfile . && echo "put $outfile" | sftp remote:/tmp/
Connecting to remote...
Changing to: /tmp/
sftp> put /tmp/test.tar.gz
Uploading /tmp/test.tar.gz to /tmp/test.tar.gz
/tmp/test.tar.gz

Một SFTP khác:

outfile=/tmp/test.tar.gz
sftp -b /dev/stdin remote >/dev/null 2>&1 << EOF
cd /tmp
get $outfile
bye
EOF
echo $?
0

Vì vậy, làm thế nào chính xác tôi sẽ sử dụng này? Tôi có nghĩa là làm thế nào tôi có thể thiết lập các tập tin nên có trong bóng tar. Và tôi sẽ đặt mật khẩu ở đâu? Và làm cách nào để thiết lập nó để tôi không phải chấp nhận dấu vân tay của máy chủ?
BrainStone

Vui lòng tìm hiểu thêm về ssh, man ssh, man ssh-agent, man ssh_config trả lời tất cả những nghi ngờ của bạn. Những tệp nào bạn xác định cục bộ với các đối số tar, sau đó nó được dẫn qua ssh đến máy chủ từ xa và đầu ra được chuyển hướng đến tệp.
jirib

Có thể làm điều đó mà không cần một đường ống?
BrainStone

Điều này cũng không thể hoạt động vì nó cần phải là sftp ( không có quyền truy cập ssh ) hoặc ftp
BrainStone

Đối với ftp, xem người đàn ông lftp. Nếu bạn cần có các kịch bản phức tạp hơn, hãy sử dụng 'sftp -b' và có một tệp có các lệnh hoặc sử dụng 'tài liệu ở đây' (<< EOF).
jirib

3

Tar không nói ftp hoặc sftp. Đó không phải là công việc của nó. Bạn không thể làm điều này với tar một mình. Sử dụng các công cụ thích hợp cho từng công việc và kết hợp chúng với shell là cách làm thông thường trên các hệ thống unix.

Giải pháp rõ ràng nhất là tạo tệp lưu trữ cục bộ, sau đó sao chép nó vào máy từ xa.

Nếu bạn không muốn tạo kho lưu trữ cục bộ vì bạn không có đủ chỗ, bạn có thể tạo một đường ống có tên, viết tar vào đường ống này và tìm một (các) ứng dụng khách có thể đọc từ các đường ống. Thật không may, sftp từ chối putmột đường ống. Một số máy khách FTP hoạt động, ví dụ lftp:

mkfifo f
tar -cvjf f ~/importantfiles/* &
sleep 2
lftp -f - <<EOF
open user@host
put f Backup.tar.bz2
EOF
wait
rm f

Đặt mật khẩu FTP của bạn vào ~/.netrc.

Ngoài ra, có một cách để làm cho lệnh tar của bạn lưu trực tiếp vào máy chủ từ xa, nhưng bạn cần một số thiết lập trước đó. Gắn máy chủ từ xa qua SSHFS hoặc curlftpfs .

mkdir -p ~/net/host
sshfs host: ~/net/host
tar -cvjf ~/net/host/Backup.tar.bz2 ~/importantfiles/*
fusermount -u ~/net/host
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.