Chuyển tiếp đại lý SSH sử dụng tên người dùng khác nhau và các khóa khác nhau


18

Có một câu hỏi rất giống nhau mà nếu được trả lời có thể là câu trả lời cho câu hỏi này. Thật không may, đó là một trường hợp "không cần trả lời câu hỏi tôi đã hỏi vì vấn đề không phải là điều tôi nghĩ."

Cài đặt

  1. Máy chủ bastion.ec2 chấp nhận kết nối ssh từ máy trạm của tôi thông quassh -i mykey.pem myname@bastion.ec2
  2. Máy chủ service1.ec2 chấp nhận kết nối ssh chỉ từ bastion.ec2 quassh -i sharedkey.pem shareduser@service1.ec2

Các yêu cầu

  1. Cả hai khóa chỉ có trên máy trạm của tôi vì vậy tôi thực sự không thể thực hiện lệnh thứ 2 mà không sao chép khóa
  2. Vì lý do bảo mật, tôi muốn sử dụng chuyển tiếp ssh-agent hơn là sao chép các khóa ssh sang bastion.ec2

Giải pháp

Đây là nơi bạn đến. Làm cách nào tôi có thể chuyển tiếp một khóa khác cho kết nối thứ 2?

Nếu shareduser có mykey.pub thì nó ~/.ssh/authorized_keyssẽ hoạt động:

ssh -i mykey.pem myname@bastion.ec2 ssh shareduser@service1.ec2

Tuy nhiên, tôi không muốn mọi người dùng phải đặt khóa chung của họ vào mọi máy chủ.

Câu trả lời:


21

Bước 1

Hãy chắc chắn rằng đại lý địa phương của bạn đã sẵn sàng

Chỉ vì bạn có thể ssh vào máy chủ pháo đài của mình mà không chỉ định đường dẫn khóa hoặc được nhắc nhập mật khẩu, không có nghĩa là đại lý ssh của bạn đang chạy và giữ khóa của bạn. Một số HĐH hiện đại (ví dụ: OSX) xử lý việc này cho bạn.

Trên máy cục bộ của bạn

$ ssh-add -L
ssh-rsa ObahfCbvagGbLbhSbeHfvatEBG13== ~/.ssh/mykey.pem
ssh-rsa LbhNerWhfgJnnlGbbPyrireEBG13== ~/.ssh/sharedkey.pem

hình 1

Điều đó có nghĩa là đại lý của bạn đang chạy và có chìa khóa của bạn.

$ ssh-add -L
The agent has no identities.

hình 2

Điều đó có nghĩa là bạn chưa thêm bất kỳ khóa nào vào đại lý của mình. Khắc phục điều đó bằng:

ssh-add ~/.ssh/mykey.pem ~/.ssh/sharedkey.pem

Hình 3

Bước 2

Hãy chắc chắn rằng đại lý từ xa của bạn đã sẵn sàng

SSH vào máy chủ pháo đài của bạn và lặp lại kiểm tra từ fig.1 & fig.2 . Tuy nhiên, lỗi bạn có nhiều khả năng nhận được là:

$ ssh-add -L
Could not open a connection to your authentication agent.

hình 4

Điều đó rất có thể có nghĩa là máy khách SSH của bạn không chuyển tiếp kết nối tác nhân xác thực của bạn.

Bạn có thể buộc điều này bằng -Acờ (miễn là cấu hình sshd trên máy chủ cho phép, đó là mặc định ).

$ ssh -A bastion.ec2

hình.5

Bước 3

Đảm bảo bạn đang sử dụng đúng phím

Nếu bạn đã thêm khóa vào đại lý, đại lý của bạn đang chuyển tiếp và đại lý từ xa của bạn liệt kê các khóa cục bộ của bạn. Chỉ có hai lý do có khả năng bạn không nhận được kết nối. Hoặc bạn không sử dụng đúng khóa hoặc bạn không sử dụng đúng tên người dùng.

Xuất đối tác công khai vào khóa riêng của bạn:

$ cd
$ cd .ssh
$ ssh-keygen -y -f mykey.pem
ssh-rsa ObahfCbvagGbLbhSbeHfvatEBG13
$ ssh-keygen -y -f sharedkey.pem
ssh-rsa LbhNerWhfgJnnlGbbPyrireEBG13

hình 6

Chúng nên giống như những gì bạn đã thấy từ ssh-add -Lđầu đến ==cuối.

Bây giờ bằng cách này hay cách khác bạn phải vào hộp bạn không kết nối được và xem nội dung của $HOME/.ssh/authorized_keystệp cho người dùng mà bạn đang cố gắng kết nối. Bạn cần đảm bảo khóa công khai mà bạn xuất ra bằng lệnh ở trên nằm trong tệp đó trên một dòng. Bạn không thể tin rằng các sharedkey.pubkhối Bro 2 gửi qua email cho bạn là đúng. Kiểm chứng! Điều này có thể yêu cầu người khác có thể SSH vào như người dùng đó để lấy cho bạn tệp ủy quyền hoặc nhận quyền truy cập root. Nếu bạn đã đi xa đến mức này mà nó vẫn không hoạt động, bạn không thể dùng các phím tắt.

Bước 4

Làm cho nó dễ dàng

Hy vọng rằng các bước trên đã đưa bạn vào. Bây giờ, hãy làm cho cơn đau đầu này biến mất miễn là bạn đang sử dụng máy trạm này.

Cấu hình ssh-client cục bộ của bạn

Host *
    # A lot of people put an IdentityFile line in this Host * section.
    # Don't do that unless you will use only 1 key everywhere forever.
    #IdentityFile id_rsa

Host bastion.ec2
    # You want to make sure you always forward your agent to this host.
    # But don't forward to untrusted hosts. So don't put it in Host *
    ForwardAgent yes
    # Go a head and put the IP here in case DNS ever fails you.
    # Comment it out if you want. Having it recorded is a good backup.
    HostName 172.31.0.1
    # You don't want to create a proxy loop later, so be explicit here.
    ProxyCommand none
    # SSH should try using all keys in your .ssh folder, but if you
    # know you want this key, being explicit speeds authentication.
    IdentityFile ~/.ssh/mykey.pem

# Connect effortlessly by hostname or IP address
# This assumes that your internal DNS uses the fake TLD ec2
# This assumes that 172.31.0.0 is your C-Class subnet
Host *.ec2 172.31.*
    # This command says proxy all ssh connections through bastion as if
    # you had done an ssh -A
    ProxyCommand ssh -W %h:%p bastion.ec2
    ForwardAgent yes
    # These next lines are documentation you leave as a love letter to
    # your future self when all else fails or you have to help a
    # coworker and decide to look at your own config.
    # ssh-add ~/.ssh/*.pem
    # ssh -At bastion.ecs ssh admin@172.31.18.19

hình 7

Nếu bạn mất không có gì khác xa Hình 7 nó phải được sử dụng hợp lý ProxyCommand& ForwardAgent.

Tự động điền .bash_profile của bạn

Bạn không muốn phải làm ssh-addthủ công mỗi khi đăng nhập vào máy. ~/.bash_profilelà tập lệnh chạy mỗi lần bạn đăng nhập **. Đặt dòng từ hình. 3 trong đó và bạn nên luôn luôn có đại lý của bạn sẵn sàng.

** Đừng nhầm lẫn điều này .bashrcchạy với mỗi thiết bị đầu cuối [tương tác] mới. Đại lý của bạn tiếp tục chạy ngay cả khi bạn đóng tất cả các phiên cuối. Không cần tải lại chìa khóa của bạn

Thay thế cho việc sử dụng .bash_profile

Tôi cũng đã tạo ra một ý chính có thêm Tác nhân khởi động OSX / macOS . Bạn có thể sử dụng phương pháp đó để bắt đầu ssh-agentkhởi động. Nó là rất dễ dàng để cài đặt:

curl -sSL https://gist.github.com/RichardBronosky/429a8fff2687a16959294bcee336dd2a/raw/install.sh | bash

Bước 2: Bạn không thể ép buộc ForwardAgent yesvới -Anếu chủ nhà không cho phép nó.
dlamblin

Cảm ơn @dlamblin, tôi đã thêm thông tin liên quan và liên kết đến tài liệu sshd.
Bruno Bronosky

1

Đây là nơi bạn đến. Làm cách nào tôi có thể chuyển tiếp một khóa khác cho kết nối thứ 2?

Bạn không chuyển tiếp các phím. Bạn chuyển tiếp tác nhân và nó có thể có các khóa hoàn toàn độc lập hơn bạn đang sử dụng để xác thực trong lần nhảy đầu tiên. Kiểm tra các phím trong đại lý của bạn bằng cách sử dụng ssh-add -L.

Nhưng thậm chí tốt hơn, chạy kết nối qua ProxyCommand ssh -W %h:%p myname@bastion.ec2, điều này sẽ tránh được yêu cầu chuyển tiếp tác nhân, tùy chọn heap hoặc dòng lệnh và cần xác thực từ máy chủ ngay lập tức.

Bạn chỉ có thể đặt nó trong cấu hình của bạn (xem man ssh_config).


1
May mắn thay tôi thực sự biết những gì bạn đang nói về ở đây, nhưng người dùng trung bình sẽ không. Bạn tranh luận ngữ nghĩa với điều "bạn chuyển tiếp đại lý, không phải chìa khóa". Bạn đã cho tôi đủ để tiếp tục rằng tôi có thể giải quyết điều này vì vậy tôi muốn cho bạn cơ hội để sửa câu trả lời của bạn trước khi tôi thêm câu hỏi của riêng tôi. Gợi ý: ssh-add mykey.pem sharedkey.pemsau đó xác nhận với ssh-add -Lsau đóssh -At myname@bastion.ec2 ssh shareduser@service1.ec2
Bruno Bronosky
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.