注意,在操作之前,请务必让电脑的GPG软件里有对应私钥的公钥。没有公钥,私钥是无法使用的
macOS的操作说明
在macOS通过gpg-agent来通过SSH连接服务器
只要你安装了GPG Suite,理论上就应该安装了gpg-agent。你可以使用这条命令看看是否有安装
1
2
|
❯ which gpg-agent
/usr/local/MacGPG2/bin/gpg-agent
|
我们还需要安装pinentry-mac,这个软件可以在请求使用GPG的时候弹出一个GUI窗口让你输入PIN
如果没有这个软件,你就只能在命令行里输入PIN,这在某些没有命令行的软件调用GPG时会直接失败
1
|
brew install pinentry-mac
|
接着我们需要去gpg的配置文件里启用gpg-agent
1
|
vim ~/.gnupg/gpg-agent.conf
|
在里面输入这些配置内容,注意pinentry-program
的路径要根据你的情况修改,如果不知道就用which pinentry-mac
查看下
1
2
3
4
|
default-cache-ttl 600
max-cache-ttl 7200
pinentry-program /opt/homebrew/bin/pinentry-mac
enable-ssh-support
|
然后我们还需要修改.zshrc
文件,或者你的其他rc文件,这样才能在shell执行之前确保gpg-agent正常工作
在末尾添加这些内容
1
2
3
|
export GPG_TTY="$(tty)"
export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
gpgconf --launch gpg-agent
|
保存,然后新开一个shell,现在你可以测试能不能看到ssh公钥了
1
2
|
❯ ssh-add -L
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQChSDO0UPpvHhEfR/s10/loc4YcXkButNgnE0fzH6DYhGYqJvLR3wC/l1fRqh5jEBu0LH+4jVymyIpJDB7ifOhA1y0lw7Vev4Clga6dlhYHpIOdIe3mo1Btjma76e8ciik38oxNR2Eh0dMcghWa+Sn1PBRLDV1BkxlrFPjTTnSxJO5KBaaVDbfEbCZB3ltLZonnRLLw0fZ6YXkNrZGLikhlv9m2Tjx0MmwuCzzWASV+d61Ql0WQjZ+H4Sb1x6Uupw5BXoucb4FE8d/v/M88NkPXi8v3CKx3ncWccqw1U7Dv6LeGQGF9ocSMejDjvgCwk5Pz6ThSBs38GimeFYNsS0otq/E3bWZFVBHEdOBnyeUwv74WpjhxV+HewKddnGdeabse6TTmGjgP6HsGGTHheWJXfs4TXivG9MTzkHNscygWmbVfemUsaYEzkgYA6jxFrWTsI2dJdcdTuDU38GXS1r5ybP8ECWYoqrUst/QkZw6sHr9Vi+ssefOSTBmxdxA394APCwd9lsa+b7vKrBr0Q55Pb8hrHfanrzN8luyFr7VX26VHNNIPMt4XEo5CN4plXu6A4GqLlPRyV7uxNNfV2fLbqN6c2iEd+R44BmP6T8nTDL/TI/J51GNGhhTkHz/PCl1LZ4fZlUiQ3VdUuUwSRr7W4GcAwcwy2DgXR6ecvox8BQ== cardno:22 526 936
|
如果你想无密码通过ssh登录某台服务器,只需要上去,将刚刚打印出的公钥粘贴到服务器的~/.ssh/authorized_keys
文件即可
如果你想在 Royal TSX 这种外部软件也能直接登录服务器,需要注意让其使用系统内置的shell,不要用软件提供的shell,因为我们gpg-agent是配置到内置shell的rc文件里的
在macOS给Git提交签名
我们需要先查看密钥的私钥ID
1
2
3
4
5
6
7
8
9
10
11
|
❯ gpg --list-secret-keys --keyid-format LONG
/Users/hongdou/.gnupg/pubring.kbx
---------------------------------
sec# rsa4096/7E84F69969F0AAA4 2023-02-13 [C]
C157ABBAFB66ACC6039069747E84F69969F0AAA4
uid [ 未知 ] Hong Dou <[email protected]>
uid [ 未知 ] Bin Wang <[email protected]>
uid [ 未知 ] sukidesuka <[email protected]>
ssb> rsa4096/51C93F62422C1141 2023-02-13 [S] [有效至:2024-02-13]
ssb> rsa4096/D5D423A7DD89E1B2 2023-02-13 [E] [有效至:2024-02-13]
ssb> rsa4096/2E7E13D2B575E640 2023-02-13 [A] [有效至:2024-02-13]
|
以我的为例,我的私钥ID就是7E84F69969F0AAA4
其实你也可以直接查看你的卡片,效果类似
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
❯ gpg --card-status
Reader ...........: Yubico YubiKey OTP FIDO CCID
Application ID ...: D2760001240103040006225269360000
Application type .: OpenPGP
Version ..........: 3.4
Manufacturer .....: Yubico
Serial number ....: 22526936
Name of cardholder: Bin Wang
Language prefs ...: en
Salutation .......:
URL of public key : [未设定]
Login data .......: [未设定]
Signature PIN ....: 非强制
Key attributes ...: rsa4096 rsa4096 rsa4096
Max. PIN lengths .: 127 127 127
PIN retry counter : 3 0 3
Signature counter : 102
KDF setting ......: off
Signature key ....: 5322 C718 ED38 B0E3 F6FF 8D50 51C9 3F62 422C 1141
created ....: 2023-02-13 08:35:16
Encryption key....: 9A0C 2414 560D 8050 7702 29BB D5D4 23A7 DD89 E1B2
created ....: 2023-02-13 08:36:19
Authentication key: D613 36BC 6E57 7F10 B8FD 7D34 2E7E 13D2 B575 E640
created ....: 2023-02-13 08:37:23
General key info..: sub rsa4096/51C93F62422C1141 2023-02-13 Hong Dou <[email protected]>
sec# rsa4096/7E84F69969F0AAA4 创建于:2023-02-13 有效至:永不
ssb> rsa4096/51C93F62422C1141 创建于:2023-02-13 有效至:2024-02-13
卡号: 0006 22526936
ssb> rsa4096/D5D423A7DD89E1B2 创建于:2023-02-13 有效至:2024-02-13
卡号: 0006 22526936
ssb> rsa4096/2E7E13D2B575E640 创建于:2023-02-13 有效至:2024-02-13
卡号: 0006 22526936
|
然后我们需要配置Git,让他用这个私钥去签名
1
2
|
git config --global commit.gpgsign true
git config --global user.signingkey 7E84F69969F0AAA4
|
现在你用git去提交的时候,就会使用私钥去签名了
Windows的操作说明
在Windows通过gpg-agent来通过SSH连接服务器
你需要在%APPDATA%\gnupg\gpg-agent.conf
这个文件里写入下面内容
1
2
3
4
5
6
|
enable-ssh-support
enable-putty-support
enable-win32-openssh-support
use-standard-socket
default-cache-ttl 600
max-cache-ttl 7200
|
然后重启电脑或者注销一下,就可以看到生效了
1
2
|
PS C:\Users\srauni> ssh-add -L
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQChSDO0UPpvHhEfR/s10/loc4YcXkButNgnE0fzH6DYhGYqJvLR3wC/l1fRqh5jEBu0LH+4jVymyIpJDB7ifOhA1y0lw7Vev4Clga6dlhYHpIOdIe3mo1Btjma76e8ciik38oxNR2Eh0dMcghWa+Sn1PBRLDV1BkxlrFPjTTnSxJO5KBaaVDbfEbCZB3ltLZonnRLLw0fZ6YXkNrZGLikhlv9m2Tjx0MmwuCzzWASV+d61Ql0WQjZ+H4Sb1x6Uupw5BXoucb4FE8d/v/M88NkPXi8v3CKx3ncWccqw1U7Dv6LeGQGF9ocSMejDjvgCwk5Pz6ThSBs38GimeFYNsS0otq/E3bWZFVBHEdOBnyeUwv74WpjhxV+HewKddnGdeabse6TTmGjgP6HsGGTHheWJXfs4TXivG9MTzkHNscygWmbVfemUsaYEzkgYA6jxFrWTsI2dJdcdTuDU38GXS1r5ybP8ECWYoqrUst/QkZw6sHr9Vi+ssefOSTBmxdxA394APCwd9lsa+b7vKrBr0Q55Pb8hrHfanrzN8luyFr7VX26VHNNIPMt4XEo5CN4plXu6A4GqLlPRyV7uxNNfV2fLbqN6c2iEd+R44BmP6T8nTDL/TI/J51GNGhhTkHz/PCl1LZ4fZlUiQ3VdUuUwSRr7W4GcAwcwy2DgXR6ecvox8BQ== cardno:22_526_936
|
不想重启电脑也可以尝试重启gpg-agent让其立即生效
1
2
3
4
5
6
7
|
PS C:\Users\srauni> gpg-connect-agent killagent /bye
OK closing connection
PS C:\Users\srauni> gpg-connect-agent /bye
gpg-connect-agent: no running gpg-agent - starting 'C:\Program Files (x86)\Gpg4win\..\GnuPG\bin\gpg-agent.exe'
gpg-connect-agent: waiting for the agent to come up ... (5s)
gpg-connect-agent: connection to agent established
|
在Windows给Git提交签名
与mac一样,你需要先查看私钥id,然后修改git的config
不同点在于,在Windows,你还需要指定gpg的路径,所以命令是这样的
注意你需要根据自己的情况修改gpg的路径
1
2
3
|
git config --global user.signingkey 7E84F69969F0AAA4
git config --global commit.gpgsign true
git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"
|