使用 SSH 协议传输文件的时候,需要把 SSH Client 端的密钥放到 Server 端中,因此需要在本地机器把生成的 SSH Key 复制到 Gitlab 中,这样就可以使用 SSH 协议在 Gitlab 上 clone 和 push 代码,否则就会提示缺少公钥:
[email protected]: Permission denied (publickey,gssapi-with-mic). fatal: Could not read from remote repository.
这一点和使用 https 协议不同,https 协议 ( http + TLS ) 在 TLS 握手的过程中, Client 和 Server 会将彼此的的密钥信息交换给对方。比如 curl 和 wget 就是使用 TLS 协议来完成密钥的交换,通过查看它们的依赖库可以发现,wget 使用了 libgnutls 库,而 curl 同时使用了 libssl 和 libgnutls 这两种实现 TLS 协议的库。
> $ ldd /usr/bin/wget | grep -E "tls|ssl" libgnutls.so.30 => /lib/x86_64-linux-gnu/libgnutls.so.30 (0x00007f25b6183000) > $ ldd /usr/bin/curl | grep -E "tls|ssl" libssl.so.1.1 => /lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007fac32dd8000) libgnutls.so.30 => /lib/x86_64-linux-gnu/libgnutls.so.30 (0x00007fac32698000)
Gitlab 添加 SSH-key
1、Client 端生成密钥对
ssh-keygen -t rsa -C "YOUR EMAIL"
完成后在 ~/.ssh/ 会生成2个文件。id_rsa 和 id_rsa.pub。前者是私钥,注意保管,后者是公钥。
2、添加 SSH Key 到 GitLab
登录 GitLab 之后: Profile Settings => SSH Keys => Add SSH key
将 id_rsa.pub 中的内容全部复制到 Gitlab 中,然后为这条密钥记录起一个名字用来识别。
标签:libgnutls,Gitlab,so.30,密钥,key,SSH From: https://www.cnblogs.com/Kernel-He/p/17155752.html