Làm cách nào tôi có thể chuyển tiếp khóa ssh đã được chuyển tiếp vào tmux?


15

Tôi đang kết nối thông qua SSH từ một máy lưu trữ các khóa của tôi, chuyển tiếp đến máy thứ hai và sau đó thử sử dụng các khóa từ trong tmux. Tôi xuất hiện để "mất" chuyển tiếp khi vào tmux. Làm cách nào để "chuyển tiếp lần nữa" để tôi có thể sử dụng các khóa của mình từ bên trong tmux?

$ ssh [server] -o ForwardAgent=yes
$ git pull       # Succeeds.
$ /bin/bash
$ git pull       # Still succeeds, despite new shell.
$ exit
$ tmux attach
$ git pull       # Permission denied (publickey)

Tôi xác nhận nếu bạn khởi chạy một đại lý được chia sẻ giữa tất cả các phiên của bạn, nó hoạt động. Tài liệu tại bose.utmb.edu/Compu_Center/ssh/SSH_HOWTO.html > Cấu hình ssh-agent Process giải thích một phương pháp để đạt được kết quả này.
Dereckson

Câu trả lời:


12

Nếu bạn đang đính kèm một phiên tmux đã có, shell sẽ không kế thừa các biến môi trường từ shell đăng nhập của bạn. Đặc biệt, nó sẽ không kế thừa các biến môi trường đại lý ssh.

Hãy thử sửa lỗi này :

  1. Tạo tập lệnh này và đặt nó vào $ HOME / .ssh / saveagent

    #!/bin/sh
    SSHVARS="SSH_CLIENT SSH_TTY SSH_AUTH_SOCK SSH_CONNECTION DISPLAY"
    
    for var in ${SSHVARS} ; do
      echo "export $var=\"$(eval echo '$'$var)\""
    done 1>$HOME/.ssh/latestagent
  2. Thêm nó vào kịch bản khởi động shell của bạn. Ví dụ: nếu bạn sử dụng bash:

    echo '. ~/.ssh/saveagent' >> ~/.bash_login
  3. Sau khi gắn tmux, chạy . $HOME/.ssh/latestagent

Xem thêm Làm cách nào để chạy tập lệnh ngay sau khi kết nối qua SSH? Đính kèm vào phiên tmux và chạy lệnh


1
Gửi tới .profile có thể, nếu bạn đang cố tương thích với các vỏ sh khác.
Dereckson

2
Câu trả lời chính xác! Một vài vấn đề tôi gặp phải: a - một số biến môi trường chứa khoảng trắng, vì vậy dòng trước cuối trong saveagenttập lệnh sẽ là : echo "export $var=\"$(eval echo '$'$var)\"". b -latestagent tập lệnh nên được gọi với sourcethay vì sh, vì vậy việc đặt các biến sẽ ảnh hưởng đến vỏ gọi. c - gọi latestagentkịch bản tự động khi đính kèm tmux có thể được thực hiện thông qua phương thức được mô tả ở đây: unix.stackexchange.com/questions/86925/ trộm
Joe

Cảm ơn @Joe, tôi đã sửa đổi câu trả lời của mình để bao gồm các cải tiến của bạn.
GnP

0

Trừ khi bạn muốn tìm một tập lệnh chứa tất cả các biến bạn cần trong mọi shell mà bạn sinh ra trong bất kỳ shell mới nào được sinh ra bởi cùng tmuxcác phiên máy chủ, bạn có thể muốn nói tmuxđể đưa các biến vào phiên hoặc môi trường toàn cầu bằng set-environmentlệnh. Ví dụ như thế này (đối với bash):

for var in DISPLAY SSH_AUTH_SOCK ...; do
    tmux setenv "$var" "${!var}"
done

nhớ thêm -gcờ nếu bạn muốn nó trong các phiên khác và sử dụng -t <session>nếu bạn đang chạy nó từ bên ngoài tmux.


0

Sau khi đọc các câu trả lời khác ở đây, tôi quyết định chỉ sao chép khóa công khai / riêng tư của mình vào máy chủ từ xa, do đó tôi không cần phải lo lắng về việc chuyển tiếp đại lý nữa.

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.