Cách thẳng về phía trước để chạy ssh-agent và ssh-add khi đăng nhập qua SSH?


38

Tôi đang cố gắng để các lệnh sau được tự động thực thi khi tôi đăng nhập vào máy chủ của mình thông qua ssh:

ssh-agent /bin/bash
ssh-add ~/.ssh/id_rsa

Khóa ssh của tôi có cụm mật khẩu và tôi vẫn ổn khi nhập nó một lần cho mỗi lần đăng nhập.

Tôi đã thử đặt cái này vào tệp .bashrc của mình, tuy nhiên tôi tin rằng ssh-agent bắt đầu một phiên bash mới. Khi tôi cố gắng đăng nhập sau khi có cái này trong .bashrc, nó bị kẹt và tôi phải gõ 'exit' để sau đó thấy dấu nhắc 'nhập mật khẩu để mở khóa'

Bất cứ một đề nghị nào khác?

Máy chủ đang chạy Ubuntu LTS


Tại sao tác nhân chính trên máy chủ? Nó nên ở trên máy khách cục bộ của bạn mà bạn đang kết nối.
Zoredache

@Zoredache Tôi muốn có thể làm git pullnhư vậy trên máy chủ từ xa
Nhấp vào Upvote

Sau đó chạy một tác nhân SSH trên máy cục bộ của bạn và chuyển tiếp tác nhân.
Zoredache

@Zoredache Cảm ơn, không biết điều đó là có thể. Tuy nhiên, tôi vẫn muốn có thể thực hiện ssh-add / ssh-agent từ trong tập lệnh bash, ngay cả từ máy cục bộ của tôi. Thật đau đớn khi phải chạy các lệnh đó bằng tay.
Nhấp vào Upvote

Câu trả lời:


52

Bạn có thể thử thêm điều này:

eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa

Bằng cách ssh-agentnày, không khởi động một shell mới, nó chỉ tự khởi chạy trong nền và tạo ra các lệnh shell để đặt các biến môi trường thích hợp.

Như đã nói trong bình luận, có thể bạn không muốn chạy tác nhân trên máy chủ từ xa, mà là trên hộp bạn đang làm việc và sử dụng

ssh -A remote-host

để chuyển tiếp các dịch vụ của đại lý ssh địa phương của bạn đến máy chủ từ xa.

Vì lý do bảo mật, bạn chỉ nên sử dụng chuyển tiếp đại lý với máy chủ được điều hành bởi những người đáng tin cậy, nhưng tốt hơn là chạy một đại lý hoàn chỉnh từ xa bất cứ lúc nào.


Khi tôi thay thế ssh-agent /bin/bashbằng ssh-agent -s, và sau đó tôi cố gắng thực hiện git pull, tôi vẫn yêu cầu cụm mật khẩu của khóa riêng để mở khóa. Đó không thực sự là những gì tôi muốn, tôi chỉ muốn nhập cụm mật khẩu khi thực hiện ssh-add và không phải lặp lại mỗi lần tôi chạy bất kỳ lệnh git nào. Có ý kiến ​​gì không?
Nhấp vào Upvote

và chạy tác nhân cục bộ và sử dụng ssh -A không phải là một lựa chọn cho bạn? Vấn đề là, bạn không thể 'khởi động lại' tác nhân ssh trên mọi kết nối. Mỗi khi bạn khởi động nó, nó sẽ biết "không có gì" và khi bạn thêm khóa, bạn sẽ phải giải mã nó ...
Tobi Oetiker 3/03/2015

cho .ssh / tập tin cấu hình của bạn: Máy chủ từ xa-host ControlMaster auto ControlPath ~/.ssh/master-%l-%r@%h:% p ControlPersist 2h
Tobi Oetiker

1
Rất tiếc chỉ nhận ra trong bash bạn cần thêm một eval trước cuộc gọi ssh-agent .. đã cập nhật câu trả lời của tôi ở trên
Tobi Oetiker

1
bạn có thể tạo bí danh
Tobi Oetiker 17/03/2015

2

Một cách khác là sử dụng Keychain của Funtoo . Sau đó, bạn có thể dán lớp lót này trong vỏ bash của mình:

eval $(keychain --eval id_rsa)

Điều đó cũng làm điều tương tự (khởi chạy tác nhân ssh, v.v.), trong khi cũng không chạy quy trình ssh-agent cho mỗi lớp con. Thay vào đó, nó tìm kiếm các trường hợp "đã chạy" mà bạn sở hữu và gắn bạn với chúng.

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.