Nhập mật khẩu vào SSH mà không cần gõ


7

Tại nơi làm việc, tôi truy cập cả hệ thống từ xa thông qua SSH và một số giao diện web đăng nhập thông qua LDAP. Tôi sử dụng 1password để quản lý mật khẩu của mình, nhưng dường như tôi không thể tìm thấy một cách đơn giản để nhập mật khẩu từ trình quản lý mật khẩu sang SSH. Tôi đã thấy sshpassnhưng nó có thể hiển thị mật khẩu ps, bảo mật rất tệ và cũng không hoạt động trong trường hợp của tôi. Có cách nào để nhập mật khẩu từ một chương trình hoặc tập lệnh bên ngoài thông qua SSH trực tiếp không, hoặc có các phương tiện trong SSH mà tôi có thể tận dụng và giữ mật khẩu đồng bộ không? Chẳng hạn như giữ một tệp chính mà tôi mở khóa cho SSH có cùng mật khẩu, được cập nhật bất cứ khi nào tôi cập nhật mật khẩu. Lưu ý Tôi không thể trực tiếp sử dụng các khóa để đăng nhập vào hệ thống vì nó không được xây dựng để hỗ trợ nó.

Chỉnh sửa: Một người bình luận chỉ ra rằng sshpasssẽ hiển thị mật khẩu ps, đây là điều không nên. Tôi cũng không thể trực tiếp bí danh sshcho một cái gì đó như sshpass ... sshbởi vì tôi vẫn đăng nhập vào các hệ thống sử dụng khóa.

Chỉnh sửa 2: Tôi đã xác nhận rằng trình quản lý mật khẩu vẫn ổn và tôi đã thử sử dụng sshpassvới một bộ mô tả tệp để đăng nhập vào máy chủ nhưng có vẻ như nó không hoạt động - thay vì cho tôi lời nhắc nhập mã thông báo RSA của tôi, tôi không nhận được gì, điều đó khiến tôi nghĩ rằng nó không chạy qua cùng một mã và sẽ không chấp nhận sshpass.


Tạo một bí danh / hàm shell / script với một tên khác dành riêng cho một máy chủ.
ilkkachu

Không, thật không may, theo như tôi biết. Đó là một hệ thống của chính phủ và tôi phải đăng nhập bằng mật khẩu và mã thông báo RSA.
Josh

Tôi cho rằng việc thông báo cho họ rằng sử dụng khóa thay vì truyền mật khẩu qua kết nối sẽ an toàn hơn và mật khẩu là một rủi ro bảo mật cố hữu không phải là một lựa chọn, phải không?
terdon

Tôi nghi ngờ điều đó ... Nếu đó là một công ty tôi có thể nói chuyện với một nhân viên IT, nhưng đó có thể là một điều bắt buộc trong chính phủ để sử dụng mã thông báo và mật khẩu RSA.
Josh

2
Mật khẩu phía máy chủ cung cấp cho máy chủ một tùy chọn để yêu cầu đủ cường độ mật khẩu và để hạn chế cưỡng bức. Khóa không: người dùng thậm chí có thể để khóa không được mã hóa. Mật khẩu tất nhiên có thể bị nghe lén, nhưng mật khẩu cũng có thể bảo vệ khóa. (Và bất kỳ phần mềm keylogger có khả năng sẽ có đủ quyền truy cập vào cũng sao chép các tập tin quan trọng.) Phím tốt đẹp, nhưng họ yêu cầu một loại tin tưởng vào người sử dụng, và thiết bị của họ, điều mà một chính sách an ninh không phải là khả năng có. ;) Câu hỏi tiếp theo xuất hiện là: chính sách có cho phép lưu trữ mật khẩu trên máy tính không?
ilkkachu

Câu trả lời:


8

sshpasskhông phải hiển thị mật khẩu trong ps. Nó có thể đọc nó một biến môi trường:

SSHPASS=12345 sshpass -e ssh user@host

hoặc từ một tập tin:

sshpass -f /path/to/password_file ssh user@host

Việc sử dụng -d<fd>phải an toàn hơn - tuy nhiên, thật khó để sử dụng từ bash mà không sử dụng mkfifo(điều này mang lại ít nhất một cửa sổ tấn công lý thuyết) hoặc gửi mật khẩu stdin(sẽ phá vỡ vỏ ssh tương tác của bạn). Một cái gì đó như perl, hoặc python (hoặc C) có thể có thể làm điều đó sạch sẽ hơn.
Vô dụng

Vâng, đây không phải là một giải pháp an toàn, nhưng vẫn tốt hơn là viết nó trên dòng lệnh. Sử dụng FD riêng biệt có lẽ là giải pháp tốt nhất từ ​​tất cả những sai lầm mà chúng tôi đang đề xuất ở đây. Nhưng mật khẩu có mục đích của họ, vì vậy cảnh báo về chính sách mật khẩu vẫn được áp dụng.
Jakuje

Tôi đã thử sshpassnhưng có vẻ như không hoạt động ... Tôi nghĩ rằng cấu hình trên máy chủ không được thiết lập như một hệ thống SSH thông thường (nó yêu cầu mã thông báo RSA). Có giải pháp nào khác, chẳng hạn như một tệp chính chứa mật khẩu của tôi mà tôi có thể mở khóa và SSH có thể sử dụng không?
Josh

1
pscó thể liệt kê các biến môi trường (biến môi trường và đối số dòng lệnh chỉ là hai đường dẫn song song của đầu vào để thực thi).
ctrl-alt-delor

5

Sshpass của tôi có một tùy chọn -fđể đọc từ một tập tin. Vì vậy, với sự thay thế quá trình bash bạn có thể làm

sshpass -f <(myscript_call_1password) ssh host

0

Cuối cùng tôi đã đi một tuyến đường khác, do sshpasskhông làm việc với thiết lập công việc của tôi và tôi không muốn sử dụng một lệnh khác để đăng nhập. Tôi đã sử dụng kết hợp expect, tham số cấu hình ssh LocalCommandvà tập lệnh Node để lấy mật khẩu của mình. Xem Có thể thoát khỏi SSH trong LocalCommand không? cũng.

Về cơ bản giải pháp của tôi là thế này:

  1. Thiết lập một máy chủ ssh, ví dụ như Host workvới một HostNametrỏ đến máy tính của tôi, ví dụ nhưHostName localhost

  2. Thêm PermitLocalCommand yesLocalComamnd <path to my expect script>; kill $PPIDvào Hostcấu hình

  3. Sử dụng tập lệnh mong đợi để:

    1. chạy tập lệnh Node của tôi, tập lệnh này sẽ lấy mật khẩu của tôi và lưu nó vào một biến

    2. Sử dụng mật khẩu đã lưu trong kỳ vọng và sau đó tương tác (xem bên dưới)

  4. Khi phiên SSH kết thúc, LocalCommandnó sẽ chạy kill $PPID, nó sẽ đưa tôi trở lại phiên cuối cùng ban đầu.

Đây là expectkịch bản ví dụ của tôi :

set password [exec node <script>]
spawn -noecho ssh <work_host>
expect "Password"
send "${password}\n"
interact

-3

Trả lời câu hỏi ban đầu về tự động hóa và loại bỏ tổ hợp phím:

Tôi đã thấy sshpassnhưng nó yêu cầu gõ sshpasslệnh trước khi chạy ssh, điều này hơi bất tiện.

Dựa trên nhận xét của bạn:

Tôi có một tập lệnh giao tiếp với cơ sở dữ liệu 1password, vì vậy tôi đang tìm cách tích hợp tập lệnh và SSH.

Xác định bí danh (ví dụ trong bash):

alias ssh='sshpass -p$(<your_script>) ssh'

Và sử dụng nó như một sshcuộc gọi thông thường .


2
Điều này vẫn không kết thúc để lại mật khẩu hiển thị trong ps?
Shadur

@Shadur Điều đó không có trong câu hỏi.
techraf

nên được.
Shadur

Hãy bình luận dưới câu hỏi sau đó.
techraf

1
Không phải "gõ một vài ký tự là bất tiện", mà là tôi phải mở riêng trình quản lý mật khẩu của mình, sao chép mật khẩu và sau đó dán nó vào thiết bị đầu cuối. Tôi cũng không nhận ra rằng việc sshpassđặt mật khẩu vào ps, điều này không khả thi, nên sshpasskhông hoạt động.
Josh
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.