thời gian chờ khóa ssh-agent với màn hình hoặc tmux trên máy chủ pháo đài


8

Thông thường tôi có ssh-agent đang chạy, tôi ssh đến máy chủ pháo đài của mình sau đó mở một phiên tmux và kết nối với các hộp khác thông qua đó. Chuyển tiếp chính hoạt động cho bất kỳ phiên nào tôi mở từ thời điểm đó trở đi.

Nếu tôi tiếp tục phiên tmux của mình sau khi đóng thiết bị đầu cuối, ngủ laptop, bất cứ điều gì, chuyển tiếp khóa của tôi trên các phiên pháo đài của tôi vẫn hoạt động, cũng như chuyển tiếp vào bất kỳ phiên mới nào . Những cái hiện tại không hoạt động, mặc dù.

Tôi có một điều nhỏ trong bashrc của mình là giữ cho chuyển tiếp khóa hoạt động khi tôi tiếp tục tmux, nhưng tôi gặp khó khăn khi tìm cách làm cho nó tiếp tục hoạt động cho các phiên mở trong tmux.

Ví dụ: tôi có bastion01, dbhost01, dbhost02, webhost01 và webhost02.

Nếu tôi mở một kết nối đến bastion01, hãy bắt đầu tmux ở đó, sau đó kết nối với dbhost01 và webhost01 chuyển tiếp hoạt động. Nếu tôi đóng kết nối đó, kết nối lại và đính kèm phiên tmux hiện tại của tôi, sau đó thêm kết nối vào dbhost02 và webhost02, chuyển tiếp khóa hoạt động trên 02 hộp, nhưng không phải trên 01.

Xin vui lòng giúp đỡ!

Câu trả lời:


11

Mỗi khi bạn ssh vào bastion01, một ổ cắm khác sẽ được mở để xử lý chuyển tiếp khóa. Bạn có thể thấy tên tệp trong biến môi trường SSH_AUTH_SOCK. Khi bạn bắt đầu tmux, giá trị của biến môi trường đó được bao gồm trong tmuxmôi trường toàn cầu, được kế thừa bởi bất kỳ shell nào được bắt đầu trong phiên đó.

Bây giờ, khi bạn kết nối lại bastion01sau này, một ổ cắm khác được phân bổ để xử lý chuyển tiếp khóa của bạn (vì đó là phiên ssh mới). Bạn có thể thấy điều này bằng cách kiểm tra giá trị của SSH_AUTH_SOCKtrước khi bạn đính kèm lại vào tmuxphiên của bạn và sau đó. Để chuyển tiếp khóa hoạt động bên trong tmux, bạn cần cập nhật giá trị SSH_AUTH_SOCKbên trong tmuxthành tên của ổ cắm đang được sử dụng bởi phiên ssh hiện tại.

Một cách nhanh chóng và bẩn thỉu để làm điều này là viết một đoạn script ngắn sẽ lưu giá trị mới này vào một tệp và thực thi nó trong bất kỳ tmuxcửa sổ nào mà bạn sẽ - sshtừ đó.

#!/bin/bash

echo "export SSH_AUTH_SOCK=$SSH_AUTH_SOCK" > ~/.auth_ssh

Thực thi tập lệnh đó ngay khi bạn ssh vào bastion01, nhưng trước khi bạn đính kèm lại vào phiên tmux của bạn. Sau đó, trước khi bạn cố gắng ssh bất cứ nơi nào từ bên trong tmux, hãy chạy như sau:

source ~/.auth_ssh

Mỗi tmuxcửa sổ có môi trường riêng, vì vậy bạn sẽ cần chạy nó trong mỗi cửa sổ nơi bạn cố gắng chạy ssh. Để đơn giản, bạn có thể bí danh ssh để làm điều đó cho bạn:

alias ssh="source ~/.auth_ssh; ssh"

Lưu ý: đây là sự đơn giản hóa quá mức của tập lệnh mà chúng tôi sử dụng tại nơi làm việc để cập nhật thông tin ủy quyền SSH. Nếu nó không hoạt động hoàn toàn đúng, tôi hy vọng điều này ít nhất cung cấp cho bạn đủ thông tin để google một giải pháp tốt hơn (hoặc ai đó đăng một giải pháp tốt hơn ở đây).

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.