Sử dụng chỉ thị IdentityFile trong ssh_config khi sử dụng AgentForwarding


15

Có thể chỉ định các khóa được chuyển tiếp bằng cách sử dụng lệnh IdentityFile trong .ssh / config không?

Tôi đã gặp phải vấn đề này khi cố gắng triển khai một số mã thông qua Capistrano / GIT trên máy chủ sản xuất của chúng tôi. Cả khóa GIT cá nhân và công việc của tôi luôn được tải trong tác nhân SSH của tôi và điều đó đã xảy ra khi khóa cá nhân của tôi được thêm vào đại lý trước. Tôi sử dụng chuyển tiếp tác nhân khi triển khai với Capistrano vì vậy khi máy chủ cố gắng xác thực hoạt động `git pull`, nó đã thất bại với lỗi sau:

LRI: Quyền đối với `một số repo` bị từ chối đối với` người dùng của bạn`.

bởi vì nó đã cố xác thực bằng khóa git cá nhân của tôi trước khi thử khóa thích hợp (xuất hiện sau trong đại lý ssh) và cho rằng tôi đang truy cập vào một repo nước ngoài mà tôi không được phép truy cập. Tôi có khả năng chỉ có thể cấp cho người dùng cá nhân của tôi quyền truy cập vào mọi repo công việc nhưng trên máy cục bộ của tôi, tôi có thể khắc phục vấn đề này bằng cách xác định tên miền tùy chỉnh trong .ssh / config như vậy:

Lưu trữ Personal.github.com
Tên máy chủ github.com
Người dùng git
IdentityFile ~ / .ssh / some_key

Máy chủ work.github.com
Tên máy chủ github.com
Người dùng git
IdentityFile ~ / .ssh / some_other_key

và cách này git không bao giờ bị nhầm lẫn. Có thể tạo quy tắc .ssh / config cho các khóa được chuyển tiếp trên các hộp sản xuất của tôi để họ luôn biết nên sử dụng khóa nào khi lấy mã mới không? Về cơ bản tôi muốn có thể làm:

Máy chủ work.github.com
Tên máy chủ github.com
Người dùng git
IdentityFile some_forwarded_key

Cảm ơn!

Câu trả lời:


22

Bạn có thể sử dụng phần chung của khóa để chỉ định khóa riêng nào bạn muốn sử dụng từ tác nhân được chuyển tiếp. Điều này đòi hỏi phải tạo một tệp bổ sung (phần công khai của khóa) trên bất kỳ máy trung gian trực tuyến nào (các máy mà bạn chuyển tiếp tác nhân ssh cục bộ của mình ).

  1. Sắp xếp để máy trung gian có một bản sao của phần chung của khóa mong muốn ở một vị trí thuận tiện (ví dụ ~/.ssh/some_other_key.pub).

    Từ bất kỳ máy nào đã có phần công khai của khóa:

    scp some_other_key.pub intermediate:.ssh/
    

    hoặc, trên máy trung gian:

    ssh-add -L | grep something_unique > ~/.ssh/some_other_key.pub
    

    Bạn có thể muốn chỉnh sửa phần bình luận của trailing trên một phần của khóa công khai để xác định rõ hơn nguồn gốc / chủ sở hữu / mục đích của khóa (hoặc cố gắng che giấu điều tương tự).

  2. Sử dụng tên đường dẫn đến tệp khóa công khai ở trên với -ihoặc IdentityFile.

  3. Bạn cũng có thể cần sử dụng IdentitiesOnly yes(trong .ssh/confighoặc -o) để ngăn ssh cố gắng cung cấp bất kỳ danh tính bổ sung nào từ đại lý chuyển tiếp của bạn.


Đây là điều duy nhất đã làm việc cho tôi từ 10 giải pháp khác.
Tracy Fu

1
Chơi với điều này tôi nhận ra rằng nếu bạn đặt khóa chung được liên kết với khóa riêng mà bạn muốn sử dụng trong ~ / .ssh / id_rsa.pub trên máy trung gian, nó sẽ được sử dụng theo mặc định, không cần bất kỳ cấu hình nào trong ~ / .ssh / config.
bschlueter

Cảm ơn Chris và bschlueter! Bây giờ tôi kết nối với: ssh someserver -t "ssh-add -L | grep Something_unique> ~ / .ssh / id_rsa.pub; cd some / other / thư mục; bash --login"
blablabla

Khi tôi thử điều này với ssh -v -T ...máy chủ chấp nhận khóa chung, nhưng sau đó ssh nói No such identity: /home/name/.ssh/id_rsa: No such file or directoryvà sau đó xác thực thất bại. Tôi đã bật ForwardAgent trong tất cả các cấu hình của mình. Điều gì có thể là vấn đề?
Lars Nyström
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.