使用 GPG 认证密钥 SSH 登录到远程主机

本文针对 MacOS + GPG Suite 2017.2。
适用于一般的 GPG 使用场景,包括使用安全令牌的情况。
使用安全令牌体验更佳,有关教程可查看我另一篇文章。

enable-ssh-support 添加到 vim ~/.gnupg/gpg-agent.conf
添加完成后,看起来像这样。

default-cache-ttl 600
max-cache-ttl 7200
enable-ssh-support

将以下脚本加入到 shell 的 rc 里。 vim ~/.profile

gpg-agent --daemon
unset SSH_AGENT_PID
export SSH_AUTH_SOCK=$HOME/.gnupg/S.gpg-agent.ssh

将认证密钥的指纹加入 vim ~/.gnupg/sshcontrol
下方示例中的AAAA..替换成认证密钥的指纹。

# List of allowed ssh keys.  Only keys present in this file are used
# in the SSH protocol.  The ssh-add tool may add new entries to this
# file to enable them; you may also add them manually.  Comment
# lines, like this one, as well as empty lines are ignored.  Lines do
# have a certain length limit but this is not serious limitation as
# the format of the entries is fixed and checked by gpg-agent. A
# non-comment line starts with optional white spaces, followed by the
# keygrip of the key given as 40 hex digits, optionally followed by a
# caching TTL in seconds, and another optional field for arbitrary
# flags.   Prepend the keygrip with an '!' mark to disable it.

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

注销重重录,然后运行

ssh-add -L

如果出现了公钥信息,就说明成功了。

配置 VPS 使用密钥登录

将认证子密钥的公钥导出为 SSH 格式

gpg2 --export-ssh-key <key_id> > GPGSSH-<key_id>.pub

将密钥发送到 VPS

# 不使用代理
scp -P prot GPGSSH-<key_id>.pub root@hostname:/root
# 使用代理
scp -o "ProxyCommand=nc -X5 -x127.0.0.1:1080 %h %p" -P prot GPGSSH-<key_id>.pub root@hostname:/root

登录到 VPS,将公钥放置到目标置位。

mkdir /root/.ssh
mv /root/GPGSSH-<key_id>.pub  /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys

确保 SSH 配置中的密钥认证相关选项是打开的。

修改 /etc/ssh/sshd_config 文件,将 RSAAuthenticationPubkeyAuthentication 后面的值都改成 yes ,保存。

重启sshd服务,Debian/Ubuntu执行/etc/init.d/ssh restart ;CentOS执行:/etc/init.d/sshd restart

测试连接。

# 不使用代理
ssh -P prot root@hostname
# 使用代理
ssh -P prot root@hostname -o "ProxyCommand=nc -X5 -x127.0.0.1:1080 %h %p"

成功登录后,将 PasswordAuthentication yes 修改成 PasswordAuthentication no,并重启服务。

其他

关闭相关进程

killall ssh-agent; killall gpg-agent

查看环境变量是否正确

set | grep SSH_AUTH_SOCK

参考链接

https://budts.be/weblog/2012/08/ssh-authentication-with-your-pgp-key

https://www.unix-ag.uni-kl.de/~guenther/gpg-agent-for-ssh.html

https://www.vpser.net/security/linux-ssh-authorized-keys-login.html

Leave a Reply

电子邮件地址不会被公开。 必填项已用*标注