thêm mật khẩu vào .ssh / config


24

Tôi đang sử dụng Ubuntu 12.04. Tôi đang sử dụng ssh để kết nối với nhiều máy chủ hàng ngày, vì vậy tôi đặt các tham số của chúng trong tệp .ssh / config ; như thế này :

Host server1
User tux
Port 2202
HostName xxx.x.xx.x

Có cách nào để đặt mật khẩu trong tập tin này, cho mỗi kết nối không? Vì vậy, khi máy chủ yêu cầu mật khẩu, thiết bị đầu cuối sẽ đặt mật khẩu và gửi nó đến máy chủ, vì vậy tôi không cần phải nhập mật khẩu mỗi lần. Ngoài ra, tôi không muốn sử dụng cặp khóa công khai / riêng tư.


10
Đây là những gì keypairs dành cho.
Michael Hampton

Câu trả lời:


31

Không, Không có phương pháp nào để chỉ định hoặc cung cấp mật khẩu trên dòng lệnh theo cách không tương tác để xác thực ssh bằng cơ chế tích hợp sẵn. Ít nhất không phải là một trong những gì tôi biết. Bạn có thể mã hóa mật khẩu của mình thành tập lệnh mong đợi nhưng nó cũng không phải là một giải pháp tốt.

Bạn chắc chắn sẽ muốn sử dụng bàn phím để xác thực không cần mật khẩu như Michael đã nêu, cuối cùng khóa riêng có khá nhiều mật khẩu lớn trong tệp.


Vấn đề là, máy chủ của khách hàng của tôi và họ không cho phép đăng nhập bằng khóa. Tôi đang viết một tập lệnh bash bằng cách sử dụng mong đợi để đăng nhập vào tất cả các máy chủ nơi thông tin đăng nhập đang được lưu trữ từ một thiết bị lưu trữ usb. Cảm ơn
Ajo Augustine

1
Khá bất an. Điều duy nhất để đề xuất trong tập lệnh đó để khóa tệp đó với quyền truy cập tệp khó khăn.
Danila Ladner

1
Nếu họ không cho phép khóa, họ hiểu sai về cách hoạt động của ssh - cho phép đăng nhập mật khẩu sẽ mở ra cho bạn các cuộc tấn công từ điển, v.v. (mặc dù rất, rất chậm) - điều đó là không thể thực hiện tương tự với cặp khóa riêng và nếu chúng không thể thực hiện tương tự với cặp khóa riêng và nếu chúng Bạn lo lắng về việc các khóa rơi vào tay sai, bạn có thể mã hóa mật khẩu phần riêng tư của khóa để bạn cần hai yếu tố để có thể sử dụng nó (mật khẩu cũng có thể được ghi nhớ trong khóa của bạn / bởi nhân viên ssh của bạn )
Alex Berry

Giáo dục khách hàng của bạn. Giải thích cho họ rằng tốt hơn là vô hiệu hóa xác thực mật khẩu và chỉ cho phép các khóa ngược lại.
Nikita Kipriyanov

20

Để tránh chuỗi ý kiến: Có, điều này không an toàn (thậm chí không được cho là không an toàn). Tôi thực sự khuyên bạn chỉ nên làm điều đó trong một tình huống trong phòng thí nghiệm trên một mạng bị cô lập hoặc một tình huống tương tự không liên quan đến máy chủ sản xuất hoặc máy chủ sản xuất mạnh mà không có thiết lập lại / định dạng đầy đủ.

Tôi muốn thiết lập điều này vì tôi không nghĩ công tắc 2950 của mình hỗ trợ khóa riêng / công khai và tôi hy vọng một lúc nào đó sẽ có được kiến ​​thức đó, nhưng tôi vẫn chưa có.

Sử dụng một bí danh và sshpass điều này có thể được thực hiện.

  1. Cài đặt sshpass
  2. Thay đổi tệp .ssh / config của bạn để bao gồm tên người dùng như được liệt kê trong câu hỏi
  3. Thêm bí danh vào thiết bị đầu cuối của bạn (Tôi đã sử dụng .bashrc và sẽ đề xuất với các cài đặt sáng chói)
  4. Sử dụng bí danh để đăng nhập vào mục tiêu

Bí danh ví dụ của tôi là:

alias ssc='sshpass -pcisco ssh'

Trong đó "cisco" là mật khẩu. Lưu ý không có khoảng trắng giữa -p và mật khẩu.

Cách sử dụng là (tham khảo câu hỏi):

ssc server1

Lưu ý: Điều này chỉ trả lời câu hỏi trong tiêu đề cho những người sử dụng công cụ tìm kiếm. Nếu bạn đang sử dụng các máy chủ như ví dụ câu hỏi, nên sử dụng cặp khóa riêng / chung và không sử dụng câu trả lời này


Cách giải quyết khả thi duy nhất, khi bạn thực sự không thể làm việc với các phím vì bất kỳ lý do gì.
sjas

Công trinh! Tuyệt vời.
Raul

Tôi sẽ đề nghị thay thế bí danh bằng một tập lệnh shell hoàn chỉnh; điều đó sẽ tạo cơ hội để tự động chọn tệp mật khẩu sẽ sử dụng tùy thuộc vào tham số máy chủ.
7heo.tk

Người ta rất có thể đặt một khoảng trắng giữa -p và mật khẩu, vì nó thường xảy ra với các chương trình cli ...
masterxilo

10

Có, như đã đề cập ở trên, không có cách nào để lưu mật khẩu đơn giản. Tôi sẽ khuyên bạn nên sử dụng khóa ssh để ủy quyền.

đầu tiên, tạo khóa của bạn:

ssh-keygen

Sau đó sao chép khóa xung quanh trên máy chủ / máy tính để bàn của bạn:

ssh-copy-id -i .ssh/id_rsa.pub user@ip-address:

Đó là tất cả. Bạn sẽ không bao giờ được yêu cầu nhập lại mật khẩu.

Tôi cũng khuyên bạn nên xóa ủy quyền mật khẩu nói chung nhưng điều đó tùy thuộc vào bạn.


1
Cảm ơn bạn đã tham khảo ssh-copy-id! Tôi đã từng sử dụng một số chi tiết như thế sshpass -p $PASSWORD ssh $USERNAME@$HOST "echo `cat ~/.ssh/id_rsa` >> /home/$USERNAME/.ssh/authorized_keys"nhưng chương trình này sạch hơn và làm cho ý định rõ ràng.
masterxilo

3

Không có cách nào để làm điều này với ssh, nó không an toàn như nó có thể nhận được.

Như Danila đã đề cập, bạn có thể sử dụng các tập lệnh mong đợi nhưng tôi sẽ không làm phiền.

Tôi tự hỏi những gì bạn đang cố gắng để đạt được? Bạn có muốn nhảy từ máy chủ này sang máy chủ khác không? Trong trường hợp này, bạn muốn thiết lập và sử dụng ssh-agent trên máy trạm của mình và cho phép chuyển tiếp tác nhân trên các máy chủ đích; bằng cách này, trao đổi thông tin xác thực được chuyển đến đại lý địa phương của bạn mà không phải sao chép khóa riêng của bạn xung quanh.


VisualStudio có khái niệm về mã thông báo truy cập cá nhân giống như mật khẩu dành riêng cho ứng dụng trong đó tính năng này sẽ hữu ích.
spuder

1

Tôi sử dụng tập lệnh này từ ~/.local/binthư mục

#!/usr/bin/bash

ORIG_SSH=/usr/bin/ssh
HOST=$1

SSHPASS=$(grep -Pzo "Host $HOST"'\s*\n((?!Host).*\n)*#PS\s(\N+)\n' ~/.ssh/config|tail -n 2|head -n 1 | sed 's/#PS //')
if [ -n $SSHPASS ]; then
    export SSHPASS
    sshpass -e $ORIG_SSH $@
else
    $ORIG_SSH $@
fi

Cho phép tôi chỉ định cụm mật khẩu như #PS <password>trong .ssh/configtệp.

Tuy nhiên, như mọi người nói, nó tốt hơn để sử dụng ssh-keysvới ssh-agentkhi nó có thể


0

Cách chính xác để xử lý tình huống này là sử dụng tác nhân ssh dựa trên phiên. Đây là cách thực hiện:

$ eval `ssh-agent`
$ ssh-add /home/user/.ssh/your_key
Enter passphrase for /home/user/.ssh/your_key:

Mật khẩu sau đó sẽ được giữ hợp lệ cho phần còn lại của phiên. Bạn chỉ cần chạy lệnh đầu tiên một lần và có thể thêm bao nhiêu khóa tùy ý sau đó. Khi phiên bị giết, tác nhân cũng vậy nên không có lưu trữ được mã hóa cứng của mật khẩu.

Sốc rằng sau rất lâu câu trả lời này đã không còn ở đây!


Lý do không phải là có lẽ người đăng nói cụ thể rằng anh ta không muốn sử dụng cặp khóa công khai / riêng tư.
Jenny D nói Phục hồi lại

1
Tôi đã bỏ lỡ điều đó, cảm ơn bạn. Sau đó, tôi sẽ thêm rằng việc không sử dụng một cặp khóa cho SSH là một ý tưởng thực sự, thực sự tồi tệ. Nó an toàn hơn và thuận tiện hơn ... Tôi mong muốn OP xem xét lại. Sử dụng một cặp khóa không có cụm mật khẩu sẽ an toàn hơn nhiều so với không có khóa và mật khẩu. Nhưng, lý tưởng nhất, người ta sẽ sử dụng một cặp khóa với cụm mật khẩu và sử dụng các bước tôi đã cung cấp nếu / khi họ ở trong một phiên yêu cầu lưu trữ cụm mật khẩu của họ.
pranalli

-1

Bạn có thể làm điều này theo cách an toàn hơn bằng cách sử dụng sshpass

  1. Đặt mật khẩu của bạn không có lịch sử

    xuất PS = your_password ; history -d $ (history 1)

  2. Đặt bí danh máy chủ như trên trong ~ / .ssh / config

  3. Sử dụng ssh pass để sử dụng biến môi trường và đăng nhập vào máy được yêu cầu trong một lệnh

sshpass -p $ PS ssh host_alias

Môi trường của bạn đang giữ mật khẩu của bạn và thật rủi ro khi bất kỳ tập lệnh nào thực thi đều có thể rò rỉ mật khẩu này nếu bạn không biết bạn đang chạy cái gì


Không, điều đó không an toàn. Và nó khá là xấu xí.
7heo.tk

Đó không phải là "giải pháp" lâu hơn vấn đề sao? Tất cả các bước bổ sung đó và bạn vẫn cần nhậpsshpass -p $PS ...
Dan H
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.