Tôi có phần sau trong .bash_profile trên các máy chủ từ xa của mình:
if [ -z "${STY}" -a -t 0 -a X${USER} = Xarcege ]; then
reattach() {
if [ -n "${SSH_AUTH_SOCK}" ]; then
ln -snf "${SSH_AUTH_SOCK}" "${HOME}/.ssh/agent-script"
SSH_AUTH_SOCK="${HOME}/.ssh/agent-script" export SSH_AUTH_SOCK
fi
exec screen -A -D -RR ${1:+"$@"}
}
screen -wipe
echo 'starting screen... (type Ctrl-C to abort)'
sleep 5 && reattach
fi
Điều này thực hiện hai điều: thứ nhất, thiết lập chức năng shell để thay thế shell và chuyển tiếp kết nối ssh-agent, thứ hai nó gọi chức năng này sau khi tạm dừng vài giây (trong trường hợp bạn không muốn màn hình bắt đầu).
if
Mệnh đề đầu tiên sẽ đúng nếu chưa chạy màn hình ( -z "${STY}"
) được gắn vào terminal ( -t 0
) và tôi không chạy sudo (đôi khi không thay đổi $USER
).
Trước reattach
tiên, hàm sẽ kiểm tra xem ssh có được gọi với cổng ssh-agent active ( -n "${SSH_AUTH_SOCK}"
) không. Sau đó, nó sẽ thay thế bất cứ thứ gì ~/.ssh/agent-script
có trong tệp socket hiện đang hoạt động và thay thế biến môi trường ( $SSH_AUTH_SOCK
) bằng giá trị mới. Sau đó, tập lệnh sẽ thay thế trình bao hiện tại bằng một screen
phiên duy nhất (đảm bảo rằng chỉ có một phiên bản tồn tại). Bất kỳ đối số cho reattach
hàm được truyền cho lệnh (${1:+"$@"}
).
Phần cuối cùng trước tiên sẽ loại bỏ mọi phiên chết ( screen -wipe
), cho phép người dùng (tôi) biết rằng màn hình sẽ bắt đầu trong thời gian ngắn và thay vào đó có thể quay lại trình bao bằng cách nhấn Ctrl- C. Sau đó, nó chờ trong 5 giây và gọi reattach
hàm.