Đại lý SSH mất danh tính trong khi khởi động lại máy


12

Sau khi tạo khóa có tên id_rsatại vị trí mặc định của nó. Tôi đang thêm danh tính vào tác nhân SSH bằng lệnh ssh-add ~/.ssh/id_rsa, Nó đang thêm thành công.

Tôi có thể SSH mà không cần nhập cụm từ khóa như đã có với SSH Agent.

Nhưng , khi tôi khởi động lại máy hoặc máy chủ và sau đó kiểm tra danh tính bằng lệnh ssh-add -Ltôi sẽ nhận được thông báo như thế nào The agent has no identities.

Điều đó có nghĩa là khi chúng tôi khởi động lại máy, Đại lý bị mất danh tính? Đây có phải là hành vi bình thường hoặc một số điều tôi đang thiếu ở đây?

Xin hướng dẫn cho tôi, tôi không quen thuộc nhiều với SSH.


Xem chủ đề này trên trang web Unix & Linux.
janosdivenyi

Câu trả lời:


12

Nó bình thường. Mục đích của một tác nhân chính là chỉ giữ các khóa được giải mã trong bộ nhớ , nhưng nó sẽ không bao giờ ghi chúng vào đĩa. (Điều đó sẽ đánh bại mục đích - tại sao không chỉ bảo vệ khóa chính thay thế?)

Vì vậy, các khóa phải được mở khóa trên mỗi lần đăng nhập và bạn cần tự động hóa việc này - trên Linux sử dụng pam_sshlà một tùy chọn; nó tự động sử dụng mật khẩu hệ điều hành của bạn để mở khóa đại lý. Một mô-đun tương tự khác là pam_envoyafaik đáng tin cậy hơn một chút (nhưng yêu cầu systemd).

Cả hai mô-đun sẽ tự khởi động tác nhân và tải các phím tự động.


Bất kỳ ý tưởng làm thế nào để tự động hóa trên thiết bị đầu cuối mac osx?
Niks

Khi tôi chạy lệnh, $SSH_AUTH_SOCK tôi nhận được kết quả là -bash: /tmp/ssh-gT43vE99vk/agent.511:: Quyền bị từ chối Tôi bị nhầm lẫn ở đây .. thời tiết chuyển tiếp đại lý của tôi có hoạt động hay không .. bạn có thể hướng dẫn không?
Niks

Nó không có nghĩa là được sử dụng như một lệnh - nó là một biến , một thứ bạn sử dụng như một phần của lệnh khác. Ví dụ echo $SSH_AUTH_SOCKđể in giá trị của nó.
dùng1686

Này anh bạn .. có ý kiến ​​gì không? stackoverflow.com/questions/31916395/ móc
Niks

2

Hãy thử điều này với ~ / .bashrc :

if [ ! -S ~/.ssh/id_rsa ]; then
  eval `ssh-agent`
  ln -sf "$SSH_AUTH_SOCK" ~/.ssh/id_rsa
  ssh-add
fi
export SSH_AUTH_SOCK=~/.ssh/id_rsa

Điều này chỉ nên nhắc nhập mật khẩu khi bạn đăng nhập.


Cảm ơn đã trả lời, Điều đó có nghĩa là đại lý SSH đang hoạt động đúng. Và sau khi thêm nó, bạn sẽ không cần thêm danh tính mỗi lần khởi động máy? Xin lỗi nếu đây là câu hỏi ngớ ngẩn nhưng tôi rất mới với ssh.
Niks

Nếu khóa ssh của bạn có mật khẩu, nó sẽ nhắc mỗi khi bạn đăng nhập.
Shiro

Câu trả lời này có hại . Nếu bạn làm những gì nó nói, nó sẽ xóa khóa riêng của bạn. Nếu bạn không có cách nào khác để xác thực, bạn sẽ mất quyền truy cập vào các hệ thống mà bạn đã sử dụng xác thực khóa chung.
kasperd 28/03/2016

2

Trên OS X, ssh-add có một cờ đặc biệt để kết nối với Keychain nếu bạn quyết định lưu trữ khóa riêng của mình ở đó.

Cứ chạy đi ssh-add -K ~/.ssh/id_rsa.

Tôi tin rằng câu trả lời này câu hỏi của bạn đầy đủ hơn. Cờ cụ thể của OS X này rất khó tìm tài liệu cho nhưng nó đã hoạt động vì ít nhất là OS X Leopard.


2
Đây là câu trả lời thích hợp, theo sau là một câu ssh-add -Asẽ thêm tất cả các khóa trong Keychain. Ngoài ra, cũng tạo ~/.ssh/configvà thêm UseKeychain yesđể macOS sẽ luôn bảo vệ khóa của bạn, như được mô tả ở đây: unix.stackexchange.com/questions/140075/ Kẻ
lucasarruda

MacBook của tôi vẫn quên danh tính của tôi khi tôi khởi động lại, ngay cả sau khi thử điều này.
Dominic Sayers

0

Giải pháp này rất hữu ích nếu các khóa ssh của bạn được bảo vệ cụm mật khẩu.

Vấn đề với tất cả các câu trả lời ở trên là nếu khóa riêng của bạn là mật khẩu bảo vệ, mỗi khi bạn khởi động một nhà ga mới và cố gắng sử dụng khóa riêng, bạn phải gõ vào cụm từ mật khẩu và bạn sẽ kết thúc chạy nhiều bản sao của ssh-agentnăm ký ức. Giải pháp là thêm các mục sau vào ~/.bashrchoặc ~/.zshrc:

##### START Fix for ssh-agent #####
# Ref: http://mah.everybody.org/docs/ssh

SSH_ENV="$HOME/.ssh/environment"

function start_agent {
     echo "Initialising new SSH agent..."
     /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
     echo succeeded
     chmod 600 "${SSH_ENV}"
     . "${SSH_ENV}" > /dev/null
     /usr/bin/ssh-add;
}

# Source SSH settings, if applicable
if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
     #ps ${SSH_AGENT_PID} doesn't work under cywgin
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
     }
else
     start_agent;
fi
##### END Fix for ssh-agent #####

Điều này sẽ yêu cầu cụm mật khẩu của (các) khóa riêng ssh của bạn chỉ một lần khi bạn khởi chạy một thiết bị đầu cuối. Sau đó, việc mở các phiên cuối của thiết bị đầu cuối mới (hoặc các lần nhìn thấy tmux) sẽ sử dụng lại tác nhân ssh được tạo bởi đoạn trích ở trên.

Tài liệu tham khảo

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.