Tôi có một tệp trên máy chủ A (nằm sau NAT nên không thể truy cập trực tiếp). Tập tin cần được sao chép vào máy chủ B trong một thư mục bị hạn chế root. Tôi có một tài khoản trên máy chủ B với các đặc quyền sudo. Cú pháp của lệnh scp là gì?
Tôi có một tệp trên máy chủ A (nằm sau NAT nên không thể truy cập trực tiếp). Tập tin cần được sao chép vào máy chủ B trong một thư mục bị hạn chế root. Tôi có một tài khoản trên máy chủ B với các đặc quyền sudo. Cú pháp của lệnh scp là gì?
Câu trả lời:
Trước tiên, bạn cần sao chép tệp vào nơi bạn có quyền truy cập ghi mà không cần sudo,
scp yourfile serverb:
Sau đó di chuyển tệp bằng sudo
ssh serverb sudo mv yourfile /path/to/the/destination
Nếu bạn không có một nơi có thể ghi, hãy tạo một thư mục tạm thời với quyền viết cho người dùng của bạn.
ssh serverb sudo mkdir tempdir && sudo chmod 777 tempdir
scp yourfile serverb:tempdir
ssh serverb mv tempdir/yourfile /path/to/the/destination
chmod 777
thường là cách sai để làm điều đó. Xem xét những gì có thể xảy ra nếu ai đó đã đăng nhập và biết bạn sắp chạy mã này.
ssh sudo
không làm việc cho tôi - phàn nàn "không có tty hiện tại và không có chương trình hỏi qua được chỉ định"?
serverb
hoặc bạn cần ssh serverb
tách riêng, sau đó chạy sudo ...
sau khi đăng nhập.
Với SCP, bạn phải thực hiện theo hai bước, tuy nhiên, bạn có thể thực hiện trong một bước với rsync như sau:
rsync --rsync-path="sudo rsync" <LOCALFILE> USER@SERVER2:/root
Lưu ý: Điều này không yêu cầu NOPASSWD
cấu hình sudo. Nếu bạn phải nhập mật khẩu cho sudo, thì cách hai bước là cần thiết.
Để sao chép thư mục, bạn cần thêm -r
tham số. Và -v
cho đầu ra dài dòng.
Để sử dụng phương pháp trên với thông tin đăng nhập, bạn cần thêm chúng vào ~/.ssh/config
tệp của mình , vd
Host SERVER2
HostName server2.example.colm
User USER
#IdentityFile ~/.ssh/custom_key.pem
sudo: sorry, you must have a tty to run sudo
sửa lỗi -e "ssh -tt"
.
-e "ssh -tt"
, tôi nhận được protocol version mismatch -- is your shell clean?
. Bất kỳ gợi ý về cách khắc phục điều đó?
Bạn có thể sử dụng ssh và tar để giải quyết vấn đề này:
ssh -t host 'sudo -v'
ssh -C host 'cd /; sudo tar cf - path/to/file/or/dir' | tar xpsf - --preserve
Điều này trước tiên cập nhật dấu thời gian sudo của bạn (yêu cầu mật khẩu nếu cần, yêu cầu tty ( ssh -t
)), sau đó sử dụng sudo để tạo tarball từ xa và giải nén cục bộ.
"tar" trên RedHat 5 yêu cầu các tùy chọn "--preserve" xuất hiện sau lệnh "xpsf -".
tar: Invalid replacement string
, loại bỏ -s
trong dường như để sửa nó (không chắc chắn những gì bạn cần s
cho dù sao). Cảm ơn nhiều; điều này thật tuyệt.
tty_tickets
phải được vô hiệu hóa, đúng không?
Bạn có thể sử dụng sftp với lệnh sudo, ví dụ:
sftp -s 'sudo -u REMOTE_SUDO_USER /usr/libexec/openssh/sftp-server' REMOTE_USER@HOST
Nếu bạn cần nhập mật khẩu cho sudo mọi lúc, bạn có thể lưu nó vào một tệp:
echo "Enter password: "; read -s password; echo $password > password_file
và sau đó gửi nó cùng với tệp nguồn.
cat password_file source_file | ssh remote_host 'sudo -S sponge target_file'
Bạn có thể sử dụng tee
thay vì sponge
nếu bạn không có nhiều hơn.
Trước tiên, bạn cần sao chép tệp vào nơi bạn có quyền truy cập ghi mà không cần sudo, Bạn có thể thực hiện hai bước sau.
Bước 1:
scp filename newserver
Bước 2:
ssh newserver sudo mv filename /path/to/the/destination
để biết thêm thông tin đọc hướng dẫn scp
current server $ sudo scp username@server:source/path/filename /tmp/
Nó sẽ sao chép tập tin cụ thể từ nguồn vào / tmp / trong máy chủ hiện tại