2013-06-05 25 views
19

Tôi muốn sử dụng SSH bên trong tập lệnh, nhưng tập lệnh này sẽ không được thực hiện trên máy của tôi.Cung cấp mật khẩu cho lệnh ssh bên trong tập lệnh bash, Không sử dụng khóa công khai và Mong đợi

Trong quá trình triển khai của tôi, có hai giới hạn.

  • Tôi không thể làm việc bên ngoài tiêu chuẩn của vỏ, do đó tôi không thể sử dụng expect vì tôi không biết nếu nó sẽ có sẵn trên máy này.
  • Tôi không thể ngờ rằng máy này sẽ có public keys cho số SSH.

Các giải pháp tùy chọn có thể là gì?

Làm cách nào tôi có thể cung cấp cho ssh mật khẩu được yêu cầu một cách tự động và bảo mật mà không cần thêm phụ thuộc bổ sung?

Có thể cung cấp mật khẩu bên trong tập lệnh không?

Cảm ơn tất cả các bạn trước :)

+0

Are các ngôn ngữ khác như perl hoặc python có sẵn? –

+0

bình thường có, nhưng trong python tôi biết rằng nó có thể :) Cảm ơn bạn anyway – stratis

Trả lời

11

Trước hết: Đừng đặt bí mật trong văn bản rõ ràngtrừ bạn biết lý do tại sao nó là một điều an toàn để làm (tức là bạn đã đánh giá thiệt hại nào có thể được thực hiện bởi kẻ tấn công biết bí mật).

Nếu bạn là ok với việc đưa bí mật trong kịch bản của bạn, bạn có thể xuất xưởng một khoá ssh với nó và thực hiện trong một ssh-agent shell:

#!/usr/bin/env ssh-agent /usr/bin/env bash 
KEYFILE=`mktemp` 
cat <<EOF> ${KEYFILE} 
-----BEGIN RSA PRIVATE KEY----- 
[.......] 
EOF 
ssh-add ${KEYFILE} 

# do your ssh things here... 

# Remove the key file. 
rm -f ${KEYFILE} 

Một lợi ích của việc sử dụng các phím ssh là bạn có thể dễ dàng sử dụng forced commands để giới hạn những gì mà keyholder có thể thực hiện trên máy chủ.

Một cách tiếp cận an toàn hơn là để cho tập lệnh chạy ssh-keygen -f ~/.ssh/my-script-key để tạo khóa riêng cho mục đích này, nhưng sau đó bạn cũng sẽ cần một thường trình để thêm khóa công khai vào máy chủ.

+3

Tôi bắt đầu kết luận rằng tạo ra một khóa riêng cho các nhu cầu của kịch bản và sau khi loại bỏ nó sẽ là giải pháp duy nhất. Cảm ơn bạn rất nhiều – stratis

+0

Đó là câu trả lời gần nhất cho câu hỏi của tôi:) Cảm ơn bạn – stratis

1

AFAIK không có khả năng cạnh từ việc sử dụng phím hoặc mong đợi nếu bạn đang sử dụng phiên bản dòng lệnh ssh. Nhưng có các ràng buộc thư viện cho các ngôn ngữ lập trình nhất như C, python, php, .... Bạn có thể viết một chương trình bằng ngôn ngữ như vậy. Bằng cách này, có thể tự động chuyển mật khẩu. Nhưng lưu ý này tất nhiên là một vấn đề an ninh như mật khẩu sẽ được lưu trữ trong văn bản đơn giản ở chỗ chương trình

+0

cảm ơn bạn :) Bạn đã được giúp đỡ ít nhất bằng cách hiển thị cho tôi những gì có thể.Tôi nghĩ về phát triển trong python nhưng dòng mã cho một lệnh ssh trong python giống như 100 lần so với phiên bản shell ssh :) – stratis

+0

Vấn đề là, lệnh 'ssh' hy vọng mật khẩu đến từ một thiết bị đầu cuối. đó là lý do tại sao mong đợi vì nó mô phỏng một thiết bị đầu cuối. Có lẽ người ta có thể làm tương tự một cách dễ dàng. Tôi không biết làm thế nào. Tuy nhiên bạn sẽ thấy rằng 100 dòng sử dụng google;) – hek2mgl

27

Install sshpass, sau đó khởi động lệnh:

sshpass -p "yourpassword" ssh -o StrictHostKeyChecking=no [email protected] 
+0

Cảm ơn bạn rất nhiều, nhưng tôi không thể mong đợi rằng máy tính mà tôi sẽ chạy kịch bản sẽ có sshpass cài đặt, thats lý do tôi không thể sử dụng mong đợi. – stratis

16

Vì lý do bảo mật bạn phải tránh cung cấp mật khẩu trên một dòng lệnh khác bất cứ ai chạy lệnh ps có thể thấy mật khẩu của bạn. Tốt hơn để sử dụng sshpass tiện ích như thế này:

#!/bin/bash 

export SSHPASS="your-password" 
sshpass -e ssh -oBatchMode=no [email protected] 

Bạn có thể quan tâm How to run the sftp command with a password from Bash script?

+0

Cảm ơn bạn rất nhiều, nhưng tôi không thể mong đợi rằng máy tính mà tôi sẽ chạy kịch bản sẽ có sshpass được cài đặt, đó là lý do tôi không thể sử dụng mong đợi. – stratis

+0

Có thể nó chưa được cài đặt nhưng bạn có thể tải xuống từ liên kết được cung cấp và tự biên dịch nó. Nó không yêu cầu bất kỳ đặc quyền quản trị viên nào. – anubhava

+0

Tôi có phải tải nó trong mỗi máy tính mà tôi muốn chạy kịch bản không? Nếu một cái gì đó mà tôi chỉ có thể thực hiện cho mã của tôi, nó ổn, nhưng tôi chỉ muốn tạo một kịch bản độc lập mà nó có thể chạy ở khắp mọi nơi mà không cần sự cho phép, gói thêm. Đó là lý do tôi muốn ở lại tiêu chuẩn. – stratis

Các vấn đề liên quan