1) Trong tập lệnh SSH RC của bạn (~ / .ssh / rc), bạn sẽ thiết lập một liên kết tượng trưng từ một vị trí chính tắc đến "SSH_AUTH_SOCK" hiện tại. Đây là cách tôi làm trong bash (nội dung của ~ / .ssh / rc):
#!/bin/bash
if test "$SSH_AUTH_SOCK" ; then
ln -sf $SSH_AUTH_SOCK ~/.ssh/ssh_auth_sock
fi
(và đảm bảo chmod 755 ~ / .ssh / rc). "Kiểm tra" chỉ là để ngăn lỗi hiển thị nếu bạn không chạy ssh-agent (tức là bạn ssh không có -A). Nửa sau của lệnh đó thiết lập một liên kết tượng trưng ở vị trí chính tắc tự cập nhật thành SSH_AUTH_SOCK "thực" tại thời điểm đăng nhập. Điều này độc lập với việc sử dụng shell trong ssh hoặc gọi lệnh trực tiếp, cũng hoạt động với "ssh -t screen -RRD".
Lưu ý: sự tồn tại của ~ / .ssh / rc thay đổi hành vi của sshd. Đáng chú ý, nó sẽ không gọi xauth. Xem người đàn ông sshd để biết thêm thông tin và cách khắc phục điều này.
Ngoài ra, bạn không nên sử dụng "-v" với ln ngay khi nó sẽ phá vỡ rsync-over-ssh với các chẩn đoán sau:
$ rsync -n addr.maps.dev.yandex.net: .
protocol version mismatch -- is your shell clean?
(see the rsync man page for an explanation)
rsync error: protocol incompatibility (code 2) at compat.c(173) [Receiver=3.0.7]
2) Trong .screenrc của bạn, bạn chỉ cần ghi đè SSH_AUTH_SOCK vào vị trí chính tắc:
setenv SSH_AUTH_SOCK $HOME/.ssh/ssh_auth_sock
Lưu ý rằng bạn sử dụng setenv cho dù bạn sử dụng shell nào; Tôi nghĩ rằng setenv là cú pháp màn hình, không phải shell.
Giải pháp ban đầu được điều chỉnh từ bài đăng này , không hoạt động, nhưng có ý tưởng đúng.