Kết nối thông qua SSH và nhập mật khẩu tự động mà không cần sử dụng khóa chung


20

Một máy chủ cho phép kết nối SSH, nhưng không sử dụng xác thực khóa chung. Không phải trong khả năng của tôi để thay đổi điều này vào lúc này (do những khó khăn kỹ thuật, không phải tổ chức) nhưng tôi sẽ nhận được nó càng sớm càng tốt!

Điều tôi cần bây giờ là thực thi các lệnh trên máy chủ bằng cách sử dụng xác thực mật khẩu + tài khoản cũ đơn giản từ một tập lệnh . Đó là, tôi cần phải làm điều đó theo cách không tương tác. Có thể không? Và làm thế nào để tôi làm điều đó?

Máy khách sẽ thực thi tập lệnh chạy Ubuntu Server 8.04. Máy chủ chạy Cygwin và OpenSSH.


2
Những khó khăn kỹ thuật với việc kích hoạt xác thực dựa trên khóa là gì? Có lẽ bạn nên hỏi câu hỏi đó thay vào đó, hoặc ngoài câu hỏi này.
Zoredache

1
Tôi đang hỏi nó :-) serverfault.com/questions/125842/ Hiện tại tôi chỉ cần một lối thoát, vì tôi đã đập đầu vào đó một lúc rồi. Nhưng tất nhiên mục tiêu của tôi là làm cho nó hoạt động lâu dài.
Đã xóa

Câu trả lời:


22

Có một tiện ích linux được gọi là sshpass. Nó cho phép bạn thực hiện chính xác những gì bạn muốn và sẽ lấy mật khẩu máy chủ làm đối số dòng lệnh hoặc từ một tệp (tôi thích cách này, vì vậy tôi không có mật khẩu máy chủ của mình hiển thị trong lịch sử shell) và bạn sử dụng nó như vậy

sshpass -f file_with_password ssh user@server ls -la

Điều này sẽ ssh vào một máy chủ và chạy ls -la. Tuy nhiên, một điều bạn phải ssh thủ công vào máy chủ trước tiên (nếu bạn chưa làm như vậy), vì vậy máy chủ sẽ được thêm vào máy chủ của bạn ~/.ssh/known_hosts. Nếu bạn không làm điều đó, sshpasssẽ không làm việc.


2
Đây không phải là một phần tiêu chuẩn của OpenSSH và thực sự không có máy nào của tôi (Mac OS X 10.7, Ubuntu 12.04, FreeBSD 8, Debian 3.1) có nó ...
voretaq7

@ voretaq7: sshpass là một dự án SourceForge: sourceforge.net/projects/sshpass
kevinarpe

1
@KCArpe Tôi nghĩ rằng bạn đã bỏ lỡ quan điểm của tôi ("Toàn bộ thế giới không phải là máy Linux của bạn - hãy thử chọn giải pháp hoạt động ở những nơi khác"). Sử dụng SSH_ASKPASSbiến là một giải pháp chung hơn, hoạt động trên mọi hệ thống có OpenSSH và không yêu cầu cài đặt phần mềm bổ sung. Đối với một số người trong chúng ta (trong các ngành được quy định) cài đặt phần mềm mới kích hoạt rất nhiều công việc hành chính.
voretaq7

@ voretaq7 Sử dụng SSH_ASKPASSkhông hoạt động trên tất cả các hệ thống. Ngay cả khi máy khách hỗ trợ, nó sẽ không hoạt động nếu máy chủ sử dụng keyboard-interactive. Tôi thực sự đã phải đối mặt với vấn đề đó khi viết một kịch bản để phân phối một authorized_keystệp cho một số máy nhúng.
kasperd

8

Bạn có thể sử dụng Expect để làm điều này. Rõ ràng, điều này không thích hợp hơn từ quan điểm bảo mật, bởi vì nó sẽ yêu cầu bạn sử dụng tập lệnh chứa mật khẩu của bạn trong bản rõ. (Nhưng tôi sẽ không tin vào điểm đó vì bạn đã nói trong câu hỏi của mình rằng bạn dự định sử dụng xác thực khóa công khai càng sớm càng tốt!)


Điều này có vẻ như nó sẽ giải quyết vấn đề của tôi! Tôi sẽ kiểm tra nó vào ngày mai. Đây không phải là giải pháp cuối cùng, nhưng nó cung cấp một số bảo mật. Khi tôi nghĩ về nó, nếu người dùng tập lệnh là người duy nhất được phép đọc tập lệnh. Sau đó, nó sẽ được bảo mật như khóa riêng của tôi cũng được "chỉ" bảo vệ bởi các quyền của hệ thống tệp. Hay tôi đã bỏ lỡ điều gì?
Đã xóa

Tôi sẽ lấy lại kết quả vào ngày mai. :-) Cảm ơn vì đã trả lời!
Đã xóa

Nó dường như làm việc. Nhưng sshpass đã dễ dàng hơn cho trường hợp cụ thể này IMHO.
Đã xóa

7

Phụ thuộc một chút vào ngôn ngữ kịch bản bạn sử dụng. Bây giờ tôi viết kịch bản gần như mọi thứ trong python, nơi đây không phải là vấn đề. Cả pyssh và Paramiko đều cho phép bạn chỉ cần kịch bản mật khẩu mà không phiền phức.

Nếu bạn có ý định làm điều đó với (ba) sh script và sử dụng OpenSSH thì sẽ khó hơn. OpenSSH rõ ràng ngăn bạn đặt mật khẩu vào dòng lệnh (vì tất cả người dùng có thể thấy dòng lệnh bằng cách sử dụng một cái gì đó giống như ps -femojo xấu). Trong trường hợp này, bạn sẽ phải tương tác trực tiếp với chương trình ssh và có hai tùy chọn:

  • Bạn có thể viết một số lượng đáng kể mã hỗ trợ, sử dụng cái gì đó như Expect.
  • Bạn thực hiện hack bằng biến SSH_ASKPASS, yêu cầu nó gọi một ứng dụng trả lại mật khẩu của bạn và chạy tất cả dưới dạng một công việc hàng loạt để ngăn không cho nó đọc từ thiết bị đầu cuối.
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.