Chia sẻ ssh-agent session cho nhiều terminal session

18/12/2023 productivityssh

#Mở đầu

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

#Ứng dụng

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"

#Kết

🍀