Làm thế nào để tránh bị hỏi mật khẩu Nhập mật khẩu cho khóa Khi tôi đang thực hiện thao tác ssh trên máy chủ từ xa?


43

Tôi đang ssh vào một máy chủ từ xa (linux, fedora) và tôi muốn thực hiện thao tác ssh (git với bitbucket) ở đó. Có ssh-agent chạy trên máy đó,

$ ps -e|grep sh-agent
 2203 ?        00:00:00 ssh-agent

nhưng khi tôi muốn git, nó yêu cầu tôi nhập cụm mật khẩu

$ git pull
Enter passphrase for key '/user/wgong/home/.ssh/id_rsa': 

Lưu ý: nếu tôi vận hành trên máy đó cục bộ, nó sẽ không yêu cầu tôi nhập cụm mật khẩu


1
Tôi đã không sử dụng nó nhưng có một lệnh ssh-add mà tôi nghĩ là được sử dụng cho loại điều đó
barlop

Câu trả lời:


80

Theo tôi cách tốt nhất để sử dụng ssh

Trước khi sử dụng Git, hãy thêm khóa của bạn vào ssh-agent

Bắt đầu ssh-agent nếu không bắt đầu:

$ eval `ssh-agent -s`

Thêm khóa riêng của bạn bằng ssh-add

$ ssh-add ~ / .ssh / id_rsa_key
Nhập cụm mật khẩu cho /home/user/.ssh/id_rsa_key: Đã
thêm danh tính: /home/user/.ssh/id_rsa_key
(/home/user/.ssh/id_rsa_key)

Kiểm tra nếu khóa được thêm vào (tham số là chữ thường L):

$ ssh-add -l
2048 55: 96: 1a: b1: 31: f6: f0: 6f: d8: a7: 49: 1a: e5: 4c: 94: 6f
/home/user/.ssh/id_rsa_key (RSA)

Hãy thử kết nối với máy chủ Git của bạn:

$ ssh git.example.com

Bây giờ bạn có thể sử dụng Git mà không cần thêm lời nhắc mật khẩu.

Những cách khác

https://unix.stackexchange.com/questions/90853/how-can-i-run-ssh-add-automatically-without-password-prompt


nhưng tôi đã sử dụng Git thêm khóa của bạn vào ssh-agent, vậy phải làm thế nào? cảm ơn
lily

@lily Xin lỗi, tôi không hiểu câu hỏi của bạn.
La Mã

1
Đây là giải pháp hiệu quả với tôi.
Skatox

2
Làm thế nào để tôi thực hiện điều này liên tục? Đơn giản chỉ cần đặt nó vào .bashrc?
oarfish

1
FYI, evallà cần thiết bởi vì nó xuất ra các lệnh xuất các biến môi trường như SSH_AUTH_SOCK cần thiết. unix.stackexchange.com/questions3531725/ Cách
wvducky

21

Nếu bạn đã ssh-agentchạy thì bạn có thể thêm khóa và bạn sẽ phải nhập cụm mật khẩu một lần và chỉ một lần cho phiên đó.

ssh-add ~/.ssh/id_rsa

Bạn không nói hệ điều hành nào bạn đang sử dụng, nhưng nếu đó là Linux & Gnome thì ứng dụng "Mật khẩu và khóa" (tên CLI seahorse:) có thể quản lý chúng để chúng được mở khóa khi bạn đăng nhập (không yêu cầu cụm mật khẩu) . Các môi trường máy tính để bàn Linux khác có người quản lý riêng của họ. Tôi không chắc những hệ điều hành khác làm gì ở đây.


3

Lý do chính để hỏi cụm mật khẩu là khóa của bạn được mã hóa, hãy so sánh hai điều này:

  • không được mã hóa

    $ head ~/.ssh/id_rsa 
    -----BEGIN RSA PRIVATE KEY-----            
    AIIAogIBAAKCAQEAtOJQ0Z3ZbyzuknnHqn5oMCmNf8zGmERhW+g5Eftf9daZ5qvZ
    
  • được mã hóa

    $ head ~/.ssh/id_rsa 
    -----BEGIN RSA PRIVATE KEY-----    
    Proc-Type: 4,ENCRYPTED
    DEK-Info: AES-128-CBC,A95215C9E9FE00B8D73C58BE005DAD82
    
    ZAzLq/LbHSfOVkXtQz6M6U8yuAx2lIu9bH/k7ksgat92IDjZntRrT1XMpkYtjB+0
    

Vì vậy, bạn phải làm một trong những điều sau đây:

  1. Nếu nó được mã hóa, bạn có thể thử xóa mã hóa .
  2. Bạn đang sử dụng khóa sai. Nếu bạn muốn sử dụng khóa khác, chỉ định tệp khác hoặc chỉnh sửa tệp của bạn ~/.ssh/configvà chỉ định tệp nhận dạng khác ( IdentityFile).
  3. Chạy ssh-add -lđể liệt kê tất cả các danh tính của bạn (sau đó so sánh với địa phương của bạn) và kiểm tra kỹ với Stash nếu bạn đang sử dụng đúng khóa (chúng tồn tại trên cấu hình Stash).
  4. Nếu bạn biết cụm mật khẩu và bạn muốn tự động hóa nó, hãy thử cách giải quyết sau:

    PS="my_passphrase"
    install -vm700 <(echo "echo $PS") $PWD/my_pass
    DISPLAY= SSH_ASKPASS=$PWD/my_pass ssh-add - && rm -v my_pass
    

Xử lý sự cố:

  1. Kiểm tra kỹ tác nhân SSH của bạn đang chạy ( eval "$(ssh-agent -s)").
  2. Chạy lại git qua: GIT_TRACE=1 git pullhoặc với GIT_SSH_COMMAND="ssh -vv"(Git 2.3.0+) để gỡ lỗi lệnh của bạn một lần nữa.
  3. Bạn có thể cố gắng bỏ qua việc yêu cầu cụm mật khẩu (sẽ chuyển hướng nó thành true), nhưng tôi không nghĩ nó sẽ giúp ích. Nếu nó yêu cầu, có một lý do cho điều đó và về cơ bản là bắt buộc.

    DISPLAY= SSH_ASKPASS=/bin/true ssh-add
    

2

Các ssh-addchương trình bắt đầu một đại lý có thể giữ (và cung cấp) cụm từ mật khẩu của bạn. Cách sử dụng từ xa là trong phần cha mẹ của lớp vỏ tương tác của bạn (để tác nhân không dừng lại).

Dưới đây là một vài câu hỏi liên quan:

Bây giờ ... kết nối từ xa , theo quy tắc, lệnh của bạn không đăng nhập như vậy, vì vậy nó không bắt đầu ssh-add. Bạn có thể giải quyết vấn đề này bằng cách thực thi một tập lệnh

  • bắt đầu ssh-agent
  • bắt đầu ssh-add
  • thêm chìa khóa của bạn
  • chạy lệnh mà bạn muốn.

Điểm yếu là bước thứ hai: bạn vẫn sẽ được nhắc nhập cụm mật khẩu, trừ khi bạn làm suy yếu bảo mật của mình bằng cách sử dụng khóa không có cụm mật khẩu . Một số người làm điều này, hầu hết mọi người khuyên chống lại.


ssh-addkhông bắt đầu đại lý. Nó kết nối với một tác nhân đã chạy.
am

Cảm ơn - Tôi đã quen làm những điều này trong các tập lệnh riêng biệt và bỏ qua phần còn thiếu.
Thomas Dickey

0

Bạn có thể dễ dàng xóa cụm mật khẩu của khóa bằng cách sử dụng lệnh sau

ssh-keygen -p

Trên dấu nhắc đầu tiên, nhập đường dẫn tệp (hoặc nhấn Enter để thay đổi mặc định) Dấu nhắc thứ hai, nhập cụm mật khẩu cũ Dấu nhắc tiếp theo, chỉ cần nhấn enter để bỏ đặt cụm mật khẩu

Hình như đây là cách dễ nhất!


0

Bạn vẫn sẽ nhận được lời nhắc mật khẩu để giải mã khóa riêng ngay cả khi nó được tải vàossh-agent cho đến khi khóa công khai SSH tương ứng được thêm vào từ xa ~/.ssh/authorized_keys.

Để sao chép:

# We are about to ssh to localhost, therefore, unauthorized everyone.
$ rm ~/.ssh/authorized_keys

$ eval $(ssh-agent)
# Agent pid 9290

$ ssh-add
# Enter passphrase for /home/uvsmtid/.ssh/id_rsa: 
# Identity added: /home/uvsmtid/.ssh/id_rsa (/home/uvsmtid/.ssh/id_rsa)

$ ssh localhost
# Enter passphrase for key '/home/uvsmtid/.ssh/id_rsa':
# uvsmtid@localhost's password:
  # NOTE: See password prompt for private key
  #       (and only then prompt for remote login).
  #       Why? Isn't the private key is already loaded by `ssh-add`?

$ ssh-copy-id localhost
$ ssh localhost
  # NOTE: No password for private key anymore.
  #       The key is served by `ssh-agent`.

Đủ khó hiểu Mật khẩu đăng nhập SSH từ xa sẽ là đủ trong trường hợp này.

Tôi có thể suy đoán rằng điều này ngăn việc thêm khóa công khai của bạn (được ghép với khóa riêng được mã hóa) mà không biết mật khẩu mã hóa cho khóa riêng tương ứng. Đây là thủ tục đăng nhập một lần mỗi lần từ xa.

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.