Đóng, nhưng không chính xác.
Độc lập với bất kỳ thiết bị đầu cuối
ssh root@remoteserver '/root/backup.sh </dev/null >/var/log/root-backup.log 2>&1 &'
Bạn cần đóng tất cả các mô tả tệp được kết nối với ổ cắm ssh, vì phiên ssh sẽ không đóng miễn là một số quy trình từ xa có ổ cắm mở. Nếu bạn không quan tâm đến đầu ra của tập lệnh (có lẽ vì tập lệnh tự xử lý việc ghi vào tệp nhật ký), hãy chuyển hướng nó đến /dev/null
(nhưng lưu ý rằng điều này sẽ ẩn các lỗi như không thể khởi động tập lệnh).
Sử dụng nohup
không có tác dụng hữu ích ở đây. nohup
sắp xếp cho chương trình nó chạy không nhận tín hiệu HUP nếu thiết bị đầu cuối điều khiển của chương trình biến mất, nhưng ở đây không có thiết bị đầu cuối ở nơi đầu tiên, vì vậy sẽ không có gì để gửi SIGHUP đến quá trình ngoài màu xanh. Ngoài ra, nohup
chuyển hướng đầu ra tiêu chuẩn và lỗi tiêu chuẩn (nhưng không phải đầu vào tiêu chuẩn) vào một tệp, nhưng chỉ khi chúng được kết nối với một thiết bị đầu cuối, một lần nữa, chúng không xảy ra.
Tháo ra từ một thiết bị đầu cuối
aaron@localpc$ ssh root@remoteserver
root@remoteserver# nohup /root/backup.sh </dev/null &
nohup: appending output to `nohup.out'
[1] 12345
root@remoteserver# exit
aaron@localpc$
Sử dụng nohup
để tách tập lệnh khỏi thiết bị đầu cuối kiểm soát của nó để nó không nhận được SIGHUP khi thiết bị đầu cuối biến mất. nohup
cũng chuyển hướng đầu ra tiêu chuẩn và lỗi tiêu chuẩn của tập lệnh sang một tệp được gọi nohup.out
nếu chúng được kết nối với thiết bị đầu cuối; bạn phải tự chăm sóc đầu vào tiêu chuẩn.
Giữ một thiết bị đầu cuối từ xa
Nếu bạn muốn giữ lệnh chạy trong một thiết bị đầu cuối từ xa nhưng không được gắn vào phiên SSH, hãy chạy nó trong bộ ghép kênh đầu cuối như Screen hoặc Tmux .
ssh root@remoteserver 'screen -S backup -d -m /root/backup.sh'
Sau này bạn có thể kết nối lại với thiết bị đầu cuối nơi tập lệnh đang chạy bằng cách gọi screen -S backup -rd
là root trên máy đó.
Tự động hóa một lệnh từ xa
Để bảo mật tốt hơn một chút, đừng mở đăng nhập gốc từ xa trực tiếp quá rộng rãi. Tạo một cặp khóa có mục đích đặc biệt và cung cấp cho nó một lệnh bắt buộc /root/.ssh/authorized_keys
. Nội dung của tệp khóa công khai là AAAA…== wibble@example.com
; thêm một danh sách các tùy chọn được phân tách bằng dấu phẩy, bao gồm command="…"
chỉ định rằng khóa chỉ có thể được sử dụng để thực thi lệnh cụ thể này. Hãy chắc chắn giữ tất cả các tùy chọn và chìa khóa trên một dòng.
command="/root/backup.sh </dev/null >/dev/null 2>/dev/null &",no-port-forwarding,no-agent-forwarding,no-x11-forwarding,no-pty,no-user-rc AAAA…== wibble@example.com