Làm cách nào để sử dụng khóa riêng SSH để đăng nhập mà không cần nhập cụm mật khẩu mỗi lần trên Mac OS X Lion?


23

Tôi sử dụng Mac OS X Lion và đăng nhập máy chủ từ xa qua SSH mỗi ngày. Mặc dù thực tế là tôi sử dụng cặp khóa SSH để xác thực từ xa và tôi không cần phải cơ giới hóa cụm từ đăng nhập của mọi máy chủ, nhưng vẫn rất khó chịu khi thiết bị đầu cuối yêu cầu cụm mật khẩu để truy cập khóa riêng SSH của tôi.

Vì lý do bảo mật, tôi nghĩ, một cụm mật khẩu để truy cập khóa riêng SSH là cần thiết. Có cách nào để thiết bị đầu cuối yêu cầu cụm từ chính xác chỉ một lần khi khởi động, sau đó ghi nhớ nó và tự động sử dụng khóa riêng của tôi trong các phiên SSH sau này không?

Có một đoạn script được gọi là keychainhoạt động tốt trên Gentoo Linux. Nhưng tôi không bao giờ tìm ra nó trên Mac OS X Lion. Hơn nữa, có rất nhiều điều khoản đáng sợ, chẳng hạn như ssh-agent, ssh-add. Sau khi đọc các tài liệu khác nhau về các bộ công cụ SSH đó và thực hiện một số thử nghiệm bực bội, tôi càng bối rối hơn.

Do đó, tôi đã đến StackExchange, tìm kiếm một số lời khuyên về các câu hỏi sau đây.

  1. Là gì ssh-agent, ssh-add, keychain, Keychain Access.appvà cách họ tương tác với nhau?
  2. Làm cách nào tôi có thể nhập cụm mật khẩu cho khóa riêng SSH của mình một lần khi đăng nhập và sử dụng nó một cách tự do trong lần tạo phiên SSH sau này?
  3. Ơ ... có chuyện gì vậy Keychain Access.app? Nó không lưu trữ cụm từ SSH như trước đây.

Tôi liệt kê những gì tôi đã làm ở đây. Hy vọng có những manh mối về các bước tôi đã bỏ lỡ.

Bước 1. Tạo một cặp khóa SSH trên máy Mac của tôi.

$ ssh-keygen -t rsa -C "me@email.com"
# Set a passphrase for accessing the private key.

Bước 2. Sao chép khóa công khai SSH của tôi vào máy chủ từ xa. Để lấy một ví dụ, tôi sao chép khóa vào localhost, Mac.

$ ssh-copy-id USER@localhost
# Enter the login password for USER at localhost, not my SSH passphrase

Bước 3. Sau đó thử kết nối với máy chủ từ xa (localhost tại đây), thông qua xác thực cặp khóa SSH.

$ ssh USER@locahost
Enter passphrase for key '/Users/YOUR_ACCOUNT/.ssh/id_rsa': 
# Enter my SSH passphrase, not the login password.

Bước 4. Thoát khỏi máy chủ từ xa và cố gắng kết nối lại. Chết tiệt, thiết bị đầu cuối yêu cầu cụm từ SSH một lần nữa.

Một câu hỏi thường gặp là "ssh-agent có hoạt động tốt trên máy Mac của bạn không?". Thẳng thắn mà nói, tôi không biết chuyện gì đang xảy ra. Ở đây hiển thị một số kết quả chạy.

$ echo $SSH_AUTH_SOCK
/tmp/launch-M48niA/Listeners
$ echo $SSH_AUTH_PID
(EMPTY)
$ ssh-add -l
Could not open a connection to your authentication agent.
$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-Z54zXukQiP/agent.26769; export SSH_AUTH_SOCK;
SSH_AGENT_PID=26770; export SSH_AGENT_PID;
echo Agent pid 26770;
$ ssh-add -l
Could not open a connection to your authentication agent.
$ echo $SSH_AUTH_SOCK
/tmp/launch-M48niA/Listeners
$ echo $SSH_AUTH_PID
(STILL EMPTY)
$ ssh-agent  # Oh no, anther ssh-agent with different PID
SSH_AUTH_SOCK=/tmp/ssh-cx0B4FUX8B/agent.26898; export SSH_AUTH_SOCK;
SSH_AGENT_PID=26899; export SSH_AGENT_PID;
echo Agent pid 26899;
$ ps -e | grep -i ssh
26769 ??         0:00.03 ssh-agent
26899 ??         0:00.02 ssh-agent

Bất kỳ thông tin phản hồi đều được hoan nghênh. Cảm ơn!


Liên quan . Có thể bạn có thể điều chỉnh câu trả lời được chấp nhận cho trường hợp sử dụng của bạn.
Daniel Beck

Câu trả lời:


12

ssh-agentlà phần mà bạn muốn làm việc, vì nó thực hiện chính xác những gì bạn đang hỏi về. Tác nhân chạy như một daemon và khi bạn "thêm" một khóa riêng vào nó, nó sẽ nhớ khóa đó và tự động cung cấp nó cho điều khiển từ xa sshdtrong kết nối ban đầu. ( ssh-addchỉ đơn giản là lệnh bạn chạy để thêm khóa riêng vào ssh-agent).

Trong OS X, kể từ Leopard, bạn không bao giờ phải chạy ssh-agenthoặc ssh-addthủ công. Nó sẽ "chỉ xảy ra" khi bạn cố gắng kết nối với máy chủ. Khi mỗi khóa, nó sẽ nhắc bạn với hộp thoại mật khẩu UI, trong đó (trong số những thứ khác) sẽ cho phép bạn tự động thêm khóa vào ssh-agentđể bạn không bao giờ bị nhắc lại.

Điều này được xử lý bằng cách có một launchdcấu hình lắng nghe các kết nối trên $SSH_AUTH_SOCKổ cắm và tự động khởi chạy ssh-agentkhi cần lần đầu tiên; sau đó, ssh-agentnhắc bạn thông tin đăng nhập chỉ khi cần mở khóa mới.

Nếu điều đó không hoạt động, hãy đảm bảo bạn có launchdtệp cấu hình chính xác :

/System/Library/LaunchAgents/org.openbsd.ssh-agent.plist

Nếu vì lý do nào đó vẫn không hiệu quả với bạn, thì đây là cách "cũ" để vận hành mọi thứ bằng tay:

http://timesinker.blogspot.com/2007/08/getting-ssh-agent- màng-on-mac-osx.html

Ngoài ra còn có ứng dụng này, mà tôi đã ngừng sử dụng kể từ khi Leopard ra mắt nhưng về cơ bản đã làm điều tương tự trong các phiên bản trước của Mac OS X:

http://www.sshkeychain.org/


4
Cảm ơn, Michael Edenfield. Tôi đã tìm ra những gì đang xảy ra và bây giờ ssh-login-without-cụm mật khẩu hoạt động hoàn hảo trên Mac OS X Lion. Tôi đã làm một số điều ngu ngốc - Tôi đã tạo một liên kết tượng trưng ~/tmpchỉ /tmp/và chạy một công việc định kỳ để dọn dẹp ~/tmpcứ sau 2 giờ, cũng loại bỏ ổ cắm ssh-agent. Người đàn ông, tôi ghét chính mình.
Jianwen W.

13

Trong quá trình giải quyết "vấn đề", tôi đã googled một số chủ đề liên quan và viết ra một số lưu ý về cách ssh-agent, ssh-add, keychain, KeyChain Access.applàm việc. Cuối cùng hóa ra vấn đề này hoàn toàn không phải là vấn đề, thay vào đó, vấn đề hoàn toàn thuộc về tôi, và cái gọi là ssh-login-without-ask-passphrase-every mọi lúc đều hoạt động hoàn hảo trên Mac.

Tuy nhiên, quá trình này đạt được cho tôi một số kinh nghiệm. Tôi viết ra những ghi chú của tôi ở đây với hy vọng rằng họ sẽ giúp ai đó khó hiểu về những điều khoản đó.

Hai thuật ngữ mật khẩu:

  • passphrase đề cập đến cụm từ bắt buộc khi truy cập khóa riêng SSH của bạn.
  • password đề cập đến cụm từ bắt buộc để đăng nhập vào máy Mac của bạn.

Bây giờ tôi có thể tìm ra những gì các bộ công cụ làm, nghĩa là ssh-agent, ssh-add, keychain, Keychain Access.apptrên Mac.

  • ssh-agentlà dịch vụ quan trọng để cho phép sử dụng khóa riêng SSH mà không cần nhập cụm mật khẩu SSH. ssh-agenthoạt động theo cách này. Đầu tiên, nó lưu trữ hoặc bộ nhớ cache , khóa riêng SSH của bạn trong bộ nhớ chính. Sau đó, vào một thời điểm sau trong phiên này khi khóa SSH riêng của bạn là cần thiết để xác thực từ xa, ssh-agentsẽ tìm thấy khóa riêng của bạn trong bộ nhớ chính và đưa nó cho quy trình từ xa. Cơ hội duy nhất bạn được yêu cầu nhập cụm mật khẩu SSH là khi khóa riêng của bạn được thêm vào ssh-agentlúc đầu.
  • ssh-addlà một phần của ssh-agentbộ sưu tập, giúp quản lý các khóa SSH của bạn ssh-agent. Chúng tôi sử dụng ssh-addlệnh để liệt kê, thêm, xóa các khóa riêng tư trong khóa của ssh-agent. Sau đó ssh-addgiao tiếp với ssh-agentdịch vụ để hoàn thành nhiệm vụ.
  • keychainlà tập lệnh tìm ssh-agentdịch vụ (nếu không tồn tại, bắt đầu một dịch vụ mới) và gọi ssh-addđể thêm khóa riêng SSH. keychaincó một ý tưởng đơn giản và dễ hiểu, hoạt động tốt trên Linux, nơi ssh-agent thường không tự động khởi động.
  • Keychain Access.appdường như là thành phần phức tạp nhất. Đây là dịch vụ lưu trữ mã thông báo phổ quát của Mac OS X. Nó lưu trữ nhiều mã thông báo khác nhau, chẳng hạn như mật khẩu, certs, et al và đóng vai trò là đại lý mã thông báo cho những ứng dụng yêu cầu mã thông báo. Trong trường hợp khóa riêng SSH của chúng tôi, trước tiên, nó nắm bắt yêu cầu truy cập khóa riêng SSH và bật lên một cửa sổ để yêu cầu bạn lưu cụm mật khẩu SSH, một loại mã thông báo, vào khóa Keychain Access.app. Sau đó, lần tới khi bạn sử dụng khóa riêng để xác thực, hãy Keychain Access.appbật lại một cửa sổ, hỏi xem có cấp đặc quyền không. Sau khi nhận được một đồng ý lớn, hãy keychain Access.appthêm khóa riêng của bạn vào ssh-agentbộ lưu trữ.

Hai điều xứng đáng với sự chú ý của bạn:

  1. Mac OS X Lion tự động khởi động một ssh-agentdịch vụ khi khởi động, nghe trên một ổ cắm bên dưới /tmp.
  2. Keychain Access.applưu trữ cụm mật khẩu SSH của bạn để nó có thể thêm khóa riêng của bạn vào ssh-agentmà không làm gián đoạn bạn. Có, không cần nhập cụm từ SSH của bạn, nhưng cần nhập mật khẩu đăng nhập của tài khoản Mac để cấp đặc quyền khi tạo mục nhập này lần đầu tiên.

Vì vậy, tóm lại, cụm từ đăng nhập SSH mà không cần hỏi-mật khẩu sẽ hoạt động tốt trên Mac OS X.


1

Trong trường hợp các giải pháp khác ở đây không hiệu quả với mọi người, những điều sau đây có hiệu quả với tôi.

Đối với mỗi và mọi khóa riêng trong thư mục ~ / .ssh của bạn, hãy đảm bảo rằng khóa chung tương ứng cũng có mặt. Đảm bảo khóa chung được đặt tên chính xác giống với khóa riêng nhưng .pubở cuối. Nếu bạn đã có một khóa công khai thích hợp, hãy thử tạo lại nó.

Nếu bạn cần tạo lại các khóa công khai, bạn có thể thực hiện dễ dàng: -

ssh-keygen -y -f ~/.ssh/my_key > ~/.ssh/my_key.pub

thay thế my_keybằng bất cứ điều gì chìa khóa của bạn được gọi.

Sau đó, MacOS ghi nhớ cụm mật khẩu chính trong móc khóa.

Lưu ý - nhập cụm mật khẩu và lưu móc khóa bây giờ chỉ là hành động một lần (không phải một lần cho mỗi phiên đăng nhập như OP muốn), nhưng giả sử đăng nhập vào mac trong câu hỏi là mật khẩu được bảo vệ, thì mật khẩu của bạn được bảo vệ bởi mật khẩu đăng nhập đó. Ngoài ra, giải pháp này không có ý nghĩa gì với tôi ... không nên yêu cầu khóa công khai ngoài khóa riêng, nhưng vì một số lý do, MacOSX yêu cầu nó.

(ban đầu từ câu trả lời cho một câu hỏi tương tự trên Apple Stack Exchange)


1

Một điều tôi hiếm khi tìm thấy được đề cập liên quan đến việc cấu hình ~/.sshthư mục là hạn chế quyền truy cập thư mục.

Để bật ssh để tránh yêu cầu mật khẩu, tôi luôn phải đặt quyền truy cập thư mục chính của người dùng 700~/.sshquyền của thư mục 700cũng vậy.

Nếu không, nó tiếp tục hỏi tôi mật khẩu ngay cả khi tôi có tất cả các khóa được tạo và sao chép chính xác. Một thông báo lỗi được tạo trong nhật ký xác thực nhưng phần lớn người dùng cuối sẽ vô hình.


0

Một điều khác mà bạn có thể đã thử sẽ là thay thế ssh-copy-idbằng một cái gì đó như k="$(cat ~/.ssh/id_rsa.pub)"; ssh username@somehost.com "umask 0077; mkdir -p ~/.ssh; echo "$k" >> ~/.ssh/authorized_keys2".


0

Câu trả lời này hơi không phải là giải pháp cho câu hỏi này; tuy nhiên nó rất gần (tôi đã kết thúc câu hỏi này trong khi tìm kiếm một giải pháp cho vấn đề của mình).

Tôi cũng thực hiện nhiều SSH đến các máy chủ từ xa trên máy Mac của mình, như được mô tả trong câu hỏi này, tuy nhiên Keychain Access.appứng dụng đã lưu trữ cụm từ khóa và tôi không cần phải nhập nó mỗi khi tôi cần khóa để xác thực trên máy chủ SSH.

Tuy nhiên, tôi đã kích hoạt máy chủ SSH trên máy Mac của mình để tôi có thể kết nối với nó từ xa. Khi đăng nhập từ xa trên máy Mac của tôi, cụm từ khóa luôn được hỏi khi tôi muốn SSH một máy chủ khác.

Tôi tìm thấy một giải pháp cho phép lưu trữ cụm từ khóa cho phiên hiện tại. Tôi nghĩ rằng điều này có thể hữu ích cho ai đó, do đó bài đăng / câu trả lời này.


Tôi đã viết ra giải pháp tương tự của mình ở đây superuser.com/a/659668/154113
orkoden

0

Tôi đã hoang mang về vấn đề này. ssh hoạt động với mọi máy trong bộ phận của chúng tôi NGOẠI TRỪ cho táo (MacBook hoặc iMac không thành vấn đề). Cuối cùng tôi đã mệt mỏi với việc gõ mật khẩu và quyết định gỡ lỗi này.

Tôi đã đi đến iMac của tôi và sshd bị vô hiệu hóa trong bảng tùy chọn chia sẻ. Sau đó, tôi đã khởi động root và gõ "/ usr / sbin / sshd -d" để kích hoạt sshd trong chế độ gỡ lỗi. Sau đó tôi đã cố gắng ssh với máy đó và nó đã nhanh chóng thử sử dụng giao thức 2, mọi thứ dường như chỉ sử dụng tốt, nhưng sshd đã kịp thời báo cáo rằng nó không thể tìm thấy "ủy quyền". Tôi đã có một tệp ủy quyền_keys2 mà tất cả các hộp linux, solaris, you-name-it unix của tôi đều chấp nhận tốt. Tôi chỉ đơn giản là sao chép ủy quyền_keys2 sang ủy quyền_key và BOOM. Hoạt động hoàn hảo bây giờ.

Tại sao * phím chứ không phải * phím2 không xác định. Đặc biệt khi os x khá hài lòng với know_hosts2.

Trong mọi trường hợp, bây giờ tất cả các hộp táo của chúng tôi có thể được đăng nhập hoặc có các lệnh từ xa được thực thi trên chúng mà không cần mật khẩu đã nổ: nhắc ...

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.