Tôi muốn tải xuống một tập lệnh từ: http://dl.dropbox.com/u/11210438/flockonus-stack.sh và thực thi nó. Tôi đoán là, để sử dụng wget đổi tên nó, chmod nó và thực thi.
Các lệnh để làm điều đó trên Ubuntu là gì?
Tôi muốn tải xuống một tập lệnh từ: http://dl.dropbox.com/u/11210438/flockonus-stack.sh và thực thi nó. Tôi đoán là, để sử dụng wget đổi tên nó, chmod nó và thực thi.
Các lệnh để làm điều đó trên Ubuntu là gì?
Câu trả lời:
Cẩn thận
Trước khi chạy kịch bản, bạn có tin tưởng người đã viết nó không?
Ví dụ, bạn có mong đợi tập lệnh chứa cái này không?
echo "brain1" > /etc/hostname
Điều đó sẽ cố gắng thay đổi tên máy chủ của bạn.
Để tham khảo trong tương lai, nếu, sau khi xác minh tập lệnh là chính xác và không độc hại, bạn có thể chạy nó trong một dòng như thế này:
wget -O - http://dl.dropbox.com/u/11210438/flockonus-stack.sh | bash
Nhưng tải về riêng và đọc nó trước khi chạy nó lần đầu tiên.
Cũng lưu ý rằng lời nhắc tương tác bên trong tập lệnh được tải xuống có thể không hoạt động đúng bằng phương pháp này.
apt-get install
? Nếu apt-get
sẽ cài đặt bất kỳ phụ thuộc bổ sung nào, nó sẽ hỏi bạn, và nếu không thể, nó sẽ thoát ra để được an toàn. Hoặc thêm tất cả các gói phụ thuộc vào các đối số dòng lệnh, hoặc xem xét thêm -y
, ví dụ nhưapt-get -y install...
Tập lệnh không tương tác
wget -O - http://website.com/my-script.sh | bash
Lưu ý rằng khi sử dụng phương pháp này, các tập lệnh tương tác sẽ không hoạt động.
Tập lệnh tương tác
Để các kịch bản tương tác hoạt động, bạn có thể sử dụng:
bash <(wget -qO- http://website.com/my-script.sh)
Tập lệnh tương tác cần được chạy bằng root
Cảnh báo: Điều này cực kỳ nguy hiểm. Không được khuyến khích.
sudo su -c "bash <(wget -qO- http://website.com/my-script.sh)" root
Lưu ý rằng bạn không thể sử dụng đơn giản sudo bash
vì việc sử dụng <(...)
sẽ tạo một tệp ảo và mô tả tệp của nó sẽ không thể truy cập được từ ví dụ bash gốc. Nó phải được thực thi trên cùng một người dùng cần đọc tệp ảo, vì vậy nó phải được gửi dưới dạng lệnh riêng bên trong vỏ người dùng gốc.
Kịch bản đó là của tôi, nó an toàn .. Yêu thích một lớp lót, nhưng, nó có một số dòng tương tác không chạy .. dunno tại sao?
Khi dpkg chạy, được gọi bởi apt-get, nó sẽ xóa stdin. Nếu bạn đang sử dụng một lệnh như thế curl blah | bash
, thì về cơ bản bạn đang gửi nội dung của trang để bash thông qua STDIN. Nếu một trong các lệnh của bạn là apt-get, sau đó chạy, mọi thứ khác sẽ bị xóa.
Bí quyết là sử dụng một lệnh như thế này apt-get install --yes denyhosts </dev/null
. Điều này mang lại cho apt-get một đầu vào khác và nó chỉ đơn giản là xóa / dev / null thay vì phần còn lại của tập lệnh của bạn.
Nếu bạn muốn xem một ví dụ hoàn chỉnh về việc cài đặt một cái gì đó thông qua một tập lệnh từ xa, bạn có thể muốn xem tập lệnh này để thiết lập denyhosts
Đối với hồ sơ, tôi thích cuộn tròn hơn wget cho điều này, nhưng wget cũng sẽ ổn.
#!/bin/sh
if [ ! -f "/tmp/flockonus-stack.sh" ]
then
wget -O /tmp/flockonus-stack.sh http://dl.dropbox.com/u/11210438/flockonus-stack.sh
fi
sh /tmp/flockonus-stack.sh
Tất cả những ví dụ này đều thiếu một điểm khá quan trọng. Nếu bạn sử dụng url http://dl.dropbox.com/u/11210438/flockonus-stack.sh
, bạn cần kiểm tra tập lệnh mỗi khi bạn tải xuống, bởi vì nó có thể được sửa đổi bởi bất kỳ ai trên đường dẫn mạng giữa bạn và dropbox. Nếu bạn chuyển sang http s : //dl.dropbox.com/u/11210438/flockonus-stack.sh , bạn sẽ không có nguồn không an toàn đó.
(Dropbox cố gắng chuyển hướng URL http sang https, nhưng trong trường hợp bị tấn công mạng, wget sẽ không bao giờ nói chuyện với dropbox thực sự và sẽ không bao giờ thấy chuyển hướng)
Hãy thử tải xuống đơn giản như bạn đã chỉ định với wget và sau đó thực hiện trực tiếp. Bạn có thể nhận được ưa thích và sử dụng các biến cho tập lệnh bạn muốn tải xuống, nhưng điều này sẽ thực hiện thủ thuật
Ví dụ:
!#/bin/bash
#Change to temp directory
cd /tmp
#Download file using wget
wget http://dl.dropbox.com/u/11210438/flockonus-stack.sh
#Execute the file
sh flockonus-stack.sh
echo "brain1" > /etc/hostname
có thể dễ dàng như vậyrm -rf /
.