Có thể truyền mật khẩu trên một tập lệnh shell?


11

Lâu nay tôi đang tìm kiếm cái này, tôi muốn biết liệu có thể truyền mật khẩu trong tập lệnh shell không? Nhiều câu trả lời không có. Gần đây tôi đọc một bài báo nói rằng làm thế nào để truyền mật khẩu trong một tập lệnh shell. Tôi đã thử điều đó, nhưng nó dường như không hoạt động. Đây là liên kết . Bất cứ ai cũng có thể kiểm tra và hoàn nguyên trở lại? Ngoài ra xin vui lòng cho tôi biết có cách nào để truyền mật khẩu trong tập lệnh shell? Nếu không xin vui lòng cho tôi biết làm thế nào linux có được đầu vào cho mật khẩu?

Câu trả lời:


12

Bằng cách "nhập mật khẩu", bạn có thể có nghĩa là nhập dữ liệu mà không hiển thị cho người dùng.

(được đề xuất bởi geirha) Khi sử dụng bash, bạn có thể sử dụng -stùy chọn để ngăn các ký tự đã nhập được hiển thị:

read -p "Password please: " -s pass

Ngoài ra, thay đổi hành vi của thiết bị đầu cuối để ẩn các ký tự đã nhập bằng stty -echo(vô hiệu hóa echo). Sau khi đọc mật khẩu có vỏ được tích hợp readthành một biến (trong ví dụ dưới đây $pass), hãy bật lại bằng stty echo. Vì dòng mới Enterđược ẩn đến, bạn đã in một dòng mới để có đầu ra trong tương lai trên một dòng mới.

stty -echo
read -p "Password please: " pass
stty echo
printf '\n'

readprintfđược xây dựng vỏ. sttyđược cung cấp bởi coreutilsgói được cài đặt theo mặc định. Điều đó có nghĩa là đoạn trích này rất di động.

Lưu ý: -ptùy chọn không chuẩn, nhưng từ bash. Nếu bạn cần hiển thị lời nhắc trong các shell khác, hãy sử dụng:

printf "Password please: "
stty -echo
read pass
stty echo
printf '\n'

Người giới thiệu:


Tôi chỉ muốn cung cấp mật khẩu gốc của hệ thống từ xa trong tập lệnh. Có thể trong trường hợp của bạn?
karthick87

@ karthick87: không, tập lệnh này chỉ thu thập dữ liệu mà người dùng nhập vào một cách tương tác. Nếu bạn muốn đặt mật khẩu gốc trong tập lệnh, tại sao bạn không xem xét thông tin đăng nhập theo khóa?
Lekensteyn

1
Đọc của Bash cũng có một tùy chọn để vô hiệu hóa tiếng vang trong khi đọc trong dòng. Xem help '\read'.
geirha

Trong zshđó có thể đạt được thông qua read -s 'pw?Prompt text', đâu pwlà biến mà mật khẩu sẽ được đặt và -slà cờ để ẩn đầu vào.
trọc

2

Bạn muốn truyền mật khẩu đến chương trình nào?

Các kịch bản trên các liên kết làm việc cho tôi. Lưu ý rằng đó không phải là tập lệnh shell mà là tập lệnh mong đợi (cần gói expectđược cài đặt `). Sử dụng kỳ vọng là một cách phổ biến để tự động hóa các chương trình tương tác dựa trên văn bản.

Thông tin sshđăng nhập không tương tác thường được thực hiện bằng cách sử dụng xác thực dựa trên khóa với cụm mật khẩu trống.

Một số chương trình khác (như sudo) có các tùy chọn để đọc mật khẩu từ stdin.

Cung cấp mật khẩu dưới dạng tùy chọn dòng lệnh thường là một vấn đề bảo mật vì trên hầu hết các hệ thống, bất kỳ người dùng nào cũng có thể thấy bất kỳ quy trình người dùng nào khác, bao gồm cả các đối số dòng lệnh bằng các công cụ đơn giản như ps.


Tôi chỉ muốn truyền mật khẩu cho chương trình ssh.
karthick87

Vì vậy, có thể xác thực khóa hoạt động cho bạn: Sử dụng ssh-keygenđể tạo khóa xác thực (chỉ cần nhấn Enter khi được yêu cầu nhập cụm từ) và sao chép nó cho người dùng từ xa bằng cách sử dụng ssh-copy-id. Nếu xác thực khóa được bật cho sshd (theo mặc định) ssh sẽ không hỏi bạn mật khẩu
Florian Diesch

1

Một tập lệnh không bao giờ thực sự xử lý mật khẩu. Có bất kỳ ứng dụng nào cần mật khẩu yêu cầu chính nó, hoặc nếu không thể, hãy tìm một phương tiện xác thực tốt hơn với ứng dụng. Vui lòng đọc http://mywiki.wooledge.org/BashFAQ/069


0

Có một cách để lưu trữ mật khẩu trong tập lệnh bash nhưng bạn phải mã hóa tập lệnh để không ai có thể thực sự đọc nó hoặc chạy bất kỳ loại trình gỡ lỗi nào trên đó để xem chính xác những gì nó đang làm. Để mã hóa tập lệnh bash / shell và thực sự có thể thực thi được, hãy thử sao chép và dán nó vào đây

Trên trang trên, tất cả những gì bạn phải làm là gửi tập lệnh của mình (trước tiên bạn có thể gửi tập lệnh mẫu để bạn yên tâm). Một tệp zip sẽ được tạo cho bạn. Nhấp chuột phải vào liên kết tải xuống và sao chép URL bạn được cung cấp. Sau đó, đi đến hộp UNIX của bạn và thực hiện các bước sau.

Cài đặt:

   wget link-to-the-zip-file
   unzip the-newly-downloaded-zip-file
   cd /tmp/KingLazySHIELD
   ./install.sh  /var/tmp/KINGLAZY/SHIELDX-(your-script-name) /home/(your-username)  -force 

Lệnh cài đặt ở trên sẽ làm gì cho bạn là:

  1. Nó sẽ cài đặt tập lệnh được mã hóa trong thư mục /var/tmp/KINGLAZY/SHIELDX-(your-script-name).

  2. Nó sẽ đặt một liên kết đến tập lệnh được mã hóa này trong bất kỳ thư mục nào bạn chỉ định thay thế /home/(your-username)- theo cách đó, nó cho phép bạn dễ dàng truy cập tập lệnh mà không cần phải nhập đường dẫn tuyệt đối.

  3. Đảm bảo KHÔNG ai có thể sửa đổi tập lệnh - Mọi nỗ lực sửa đổi tập lệnh được mã hóa sẽ khiến tập lệnh không thể hoạt động ... cho đến khi những lần thử đó bị dừng hoặc xóa.

  4. Đảm bảo hoàn toàn KHÔNG ai có thể tạo bản sao của nó. Không ai có thể sao chép tập lệnh của bạn đến một vị trí tách biệt và cố gắng xoay quanh nó để xem nó hoạt động như thế nào. Tất cả các bản sao của tập lệnh phải là liên kết đến vị trí ban đầu mà bạn đã chỉ định trong khi cài đặt.

GHI CHÚ:

Tôi không tin rằng điều này hoạt động cho các kịch bản tương tác nhắc người dùng phản hồi. Các giá trị nên được mã hóa cứng vào tập lệnh. Mã hóa đảm bảo không ai có thể thực sự nhìn thấy các giá trị đó, do đó bạn không cần phải lo lắng về điều đó.


-1

bạn có thể chỉ cần làm một cái gì đó như thế này.

# echo -e "password_here\npassword_here" | su user

nguồn

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.