Tôi đang làm việc trên một tập lệnh cần sao chép một số tệp từ máy cục bộ sang thư mục trên máy chủ từ xa. Vấn đề tôi đang gặp phải là thư mục (/etc/init.d) do root sở hữu nên tôi nhận được ngoại lệ về quyền nếu tôi cố sao chép các tệp vào đó. Điều đó có nghĩa là tôi không thể sử dụng scp mà không đăng nhập với quyền root.
Giải pháp gần nhất tôi tìm thấy cho đến nay là câu trả lời này: https://askubuntu.com/a/872537/798391 . Thật không may, câu trả lời như đã đưa ra không thực sự hiệu quả và dường như không có gợi ý nào được đưa ra trong các nhận xét để khắc phục nó. nếu tôi chạy
mèo myscript.sh | ssh foo@myserver "sudo tee -a /etc/init.d/myscript.sh"
tôi nhận được lỗi
sudo: không có tty hiện tại và không có chương trình askpass nào được chỉ định
Một trong những ý kiến đề xuất thêm -t vào lệnh ssh
mèo myscript.sh | ssh -t foo@myserver "sudo tee -a /etc/init.d/myscript.sh"
nhưng điều đó dẫn đến lỗi
Thiết bị đầu cuối giả sẽ không được phân bổ vì stdin không phải là thiết bị đầu cuối.
Một tùy chọn được đề xuất khác là sử dụng đối số -S của sudo
mèo myscript.sh | ssh foo@myserver "sudo -S tee -a /etc/init.d/myscript.sh"
Điều đó ít nhất cũng nhắc nhập mật khẩu, nhưng nó sẽ hết thời gian chờ và hỏi lại trước khi có thể nhập hoàn toàn mật khẩu.
Tại thời điểm này tôi không có ý tưởng.Có cách nào để lệnh này hoạt động không? Có giải pháp thay thế nào tốt hơn để sao chép tệp vào một vị trí từ xa được bảo vệ không?