GPG与SSH¶
GPG - GnuPG¶
密钥对生成¶
gpg gen-keys
密钥对导入导出¶
-
将全部密钥对导出到远程机器
scp -r ~/.gnupg user@remotehost:~/
-
单密钥对的导出
gpg --list-key gpg --output mykey_pub.gpg --armor --export 26D4F2F9 gpg --output mykey_sec.gpg --armor --export-secret-key 26D4F2F9 scp mykey_pub.gpg mykey_sec.gpg user@remotehost:~/ gpg --import mykey_pub.gpg gpg --allow-secret-key-import --import mykey_sec.gpg
SSH¶
默认位置 ~/.ssh/
,使用ssh-keygen
生成密钥对。
客户端连接设置¶
# ~/.ssh/config
# Read more about SSH config files: https://linux.die.net/man/5/ssh_config
ServerAliveInterval 60
Host qfstudio
HostName qfstudio.net
User username
Host node0.qfstudio
HostName node0.qfstudio.net
User lightyears
使用密钥对登陆¶
允许用户使用密钥对登录。
# /etc/ssh/sshd_config
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
将公钥复制到服务器上。
ssh-copy-id user@host
# 亦可手动将公钥复制到`~/.ssh/authorized_keys`。
scp ~/.ssh/id_rsa.pub user@host:~/.ssh/uploaded_key.pub
ssh user@host
cat ~/.ssh/uploaded_key.pub >> ~/.ssh/authorized_keys
# 确保目录权限正确。
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
禁用密码登录。
# Forbid users in group `forbidpasswdlogin` from logging in with password
Match User lightyears
PasswordAuthentication no
Match Group forbidpasswdlogin
PasswordAuthentication no
ForwardAgent
¶
在 ssh config 中设置 ForwardAgent yes
可以让 ssh 转发密钥对,以便于在远程电脑上进行需要密钥对的操作,例如,git clone
。
需要检查 SSH Agent 是否启动。在 Windows 上这是一个服务。
Trouble shooting¶
Windows: warning: agent returned different signature type ssh-rsa (expected rsa-sha2-512)
¶
Windows的OpenSSH版本太旧。https://github.com/PowerShell/Win32-OpenSSH/issues/1263
macOS:无法签名¶
可参照这里提到的方案解决。
SSH 连接:GPG-Agent 不提示输入密码¶
原因:GPG-Agent 不明确应在哪个 TTY 要求用户输入密码。
解决方案:https://gpgtools.tenderapp.com/kb/faq/enter-passphrase-with-pinentry-in-terminal-via-ssh-connection
# ~/.zshrc
# For zsh, the following script should be placed in ~/.zshrc rather than ./zprofile
export GPG_TTY=$(tty)
if [[ -n "$SSH_CONNECTION" ]] ;then
export PINENTRY_USER_DATA="USE_CURSES=1"
fi