Việc add ssh private key khá tốn thời gian: phải start ssh-agent, rồi gọi ssh-add. Thay vì thế ta có thể chia sẻ phiên làm việc của ssh-agent cho các terminal session khác nhau.
ssh-agent là một chương trình lưu trữ lại thông tin private key và passphrase được add, giúp người dùng không phải input lại mỗi lần access vào ssh server. ssh-agent mỗi khởi chạy sẽ tạo mới một file Unix domain socket. ssh-agent lưu đường dẫn file này vào một biến môi trường SSH_AUTH_SOCK và sử dụng nó để giao tiếp giữa các process của ssh client.
Từ đó để không phải add lại private key ta chỉ cần lấy giá trị SSH_AUTH_SOCK của terminal đã add private key thành công, set giá trị lấy được vào biến SSH_AUTH_SOCK cho terminal muốn chia sẻ.
# terminal session 1
eval $(ssh-agent)
ssh-add /private-key-path
echo $SSH_AUTH_SOCK # output /somepath
# terminal session 2
export SSH_AUTH_SOCK=/somepath
Khi sử dụng ssh để làm việc trong dự án sử dụng nhiều git repository. Ý tưởng của mình là tạo một file sh, khi execute sẽ mở tất cả repo, mỗi repo trên một tab của gnome-terminal, và chỉ phải add ssh key một lần duy nhất. Đây là file sh của mình:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/a-private-key
gnome-terminal --tab -- /bin/bash -c "export SSH_AUTH_SOCK=$SSH_AUTH_SOCK;cd /path-of-repo1;bash"
gnome-terminal --tab -- /bin/bash -c "export SSH_AUTH_SOCK=$SSH_AUTH_SOCK;cd /path-of-repo2;bash"
gnome-terminal --tab -- /bin/bash -c "export SSH_AUTH_SOCK=$SSH_AUTH_SOCK;cd /path-of-repo3;bash"