使用1Password配置Git和登录VPS

缘起

因为这几天新入手了一台 VPS,准备自己搭建一个 Gitea 来练练手,正巧想起来 1Password 支持 SSH 秘钥登录有一段时间,就想着捣鼓一下。也确实有一些麻烦,好在最后也算是搞定了,因为过程也不算很顺畅,所以留点记录以备自己日后查看。(以 Win 为例,研究了下 mac 大同小异,或者说,mac 可以更简单不需要把 PUB 文件下载到指定目录,有一个通用的路径设置,也许 Win 也有不过我还没有找到)

1Password

最早用 1Password 是因为给 MacBook Pro 买的虚拟机软件 Parallels 虚拟机的时候,搞促销绑定在一起赠送的 1Password 5,就一直用了很多年。后来开始出了订阅模式,最早也没想着订阅,一直到大学毕业工作了,有了自己的美元信用卡外加旧版的软件 UI 设计和功能支持确实已经捉襟见肘,最终开起了月付费模式。再到现在用 1Password 生成的密码越来越复杂,一来二去也就不想换了。好在后来 1Password 后面退出了跨平台版本,让我可以在 Win、Mac、iOs 几乎所有我常用平台使用也就没准备再换了。

Step By Step

1Password 中需要完成的设置

禁用 OpenSSH Authentication Agent

Win+R 输入 services. Msc
找到 OpenSSH Authentication Agent 服务确保目前处于禁用(Disable)状态
参考

设置中打开 SSH Agent

设置->开发者中打开使用 SSH agent
下面的选项按需选择就好

image.png

将秘钥存入 1Password

image.png

下面在软件中保存你所需要的秘钥,我这里选择直接从软件生成了。当然你也可以把自己以前生成的秘钥保存过来,都是一样的。1Password 一共提供了 Ed25519 和 RSA(2048、3072、4096 三种长度)两种方式,如果你的服务器和 SSH 支持 Ed 25519 的话,优先推荐,可以有更高的效率。RSA 有更好的兼容性。
image.png

如果是既有的秘钥的话,可以直接拖入或者选择路径导入 1Password。

按照软件指导进行配置

保存新的秘钥后软件会提示需要执行的操作,根据你的需要进行就好了。
image.png
直接点击打开配置文件,你就会看到 1Password 给你设置好的配置信息并且伴随有详细的示例说明

# This is the 1Password SSH agent config file, which allows you to customize the
# behavior of the SSH agent running on this machine.
#
# You can use it to:
# * Enable keys from other vaults than the Private vault
# * Control the order in which keys are offered to SSH servers
#
# EXAMPLE
#
# By default, all keys in your Private vault(s) are enabled:
#
#  [[ssh-keys]]
#  vault = "Private"
#
# You can enable more keys by adding more `[[ssh-keys]]` entries.
# For example, to first enable item "My SSH Key" from "My Custom Vault":
#
#  [[ssh-keys]]
#  item = "My SSH Key"
#  vault = "My Custom Vault"
#
#  [[ssh-keys]]
#  vault = "Private"
#
# You can test the result by running:
#
#  ssh-add -l
#
# More examples can be found here:
#  https://developer.1password.com/docs/ssh/agent/config
[[ssh-keys]]
item = "MySSHKey"
vault = "个人"

我因为自己实际就只需要一个 SSH key,所以就直接引用了下面一行,大概意思就是从"个人"这个 Vault 中取用"MySSHKey"这个项目。
然后打开你常用的终端工具(我这里用的是 Powershell)执行命令就可以看到你列出的 Key 信息了。注意如果你需要导入 Vault 下的所有 ssh key 就直接写 Vault 配置就好,如果是某个 Vault 下的指定 Key,就加上 item 信息。

ssh-add -l

image.png

Git 配置

这里就不多解释了,按照大家习惯在常用的网站做好配置就好。

本地配置

接下来修改~/.ssh 文件夹下. config 文件信息。这里因为我本地偶尔 22 端口无法连接 git,就直接配置了 443 端口,各位按需就行。
如果像我公司一个 Gitlab 使用一个 User,Github 使用一个 User,建议把公钥下载到~/.ssh 文件夹下进行配置,如果没有可以直接按照下面的模板就好(这个主要是为了防止 6 次尝试就会终止登录的设置,如果少于 5 个或许也不需要。具体晚点我测试再更新)

Host github.com
    User xxx@xxx.xxx
    HostName ssh.github.com
    Port 443

如果是有 多个服务对应多个账号,可以参考下面的

#Self
Host AAA.com
    HostName AAA.com
    User xxx@aaa.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/AAA.pub
#WORK
Host BBB.com 
    HostName BBB.com
    User xxx@BBB.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/BBB.pub

完成后可以尝试执行

ssh -T git@github.com  

image.png
看到授权配置基本就没问题了,等待 Git 服务器返回对应指令就说明设置成功了,你也可以尝试 Pull 或者 clone 一个项目来进行验证。
一般在同一个应用中,1Password 没超时(这个设定取决于你自己的设置)就不需要进行第二次验证了。但你打开第二个 PowerShell 会再需要验证。

当然也有可能你在这一步出现了问题,那么可能是 Git 没有使用 OpenSSH.exe,一般执行如下命令就好

git config --global core.sshCommand "C:/Windows/System32/OpenSSH/ssh.exe"

官网也给出了单独对于某一个项目的方案,具体可以参考

实现 SSH 登录服务器

这里就需要先把 Public Key 下载下来了,当然你有合适的工具也完全可以复制或者任何你喜欢的方式把 Public 文件传到服务器上的制定位置,并按规定命名 (authorized_keys)即可。
我是直接用了一个命令实现的

cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"

这个在自己本地输入就好,ssh 后面的 username@remote_host 按照自己的服务器和登录用户进行修改就好。

接着修改配置

vim /etc/ssh/sshd_config

找到 PubkeyAuthentication 并改为

PubkeyAuthentication yes

再次执行

sudo systemctl restart ssh

再打开一个终端,尝试登录,一切正常的话就应该可以正常登录了。
如果需要多服务器不同秘钥的配置,也可以参考上面 Git 的配置,其实内容一样的。
其实这些配置完没有问题就可以把密码登录关掉了,这个就看各自需求了。

最后

基本就上面这些,但目前 1 Password 好像对 Win 的要求是必须开启 Windows Hello,这点存疑,明天到公司测试看看。
另外,Windows 下 SSH 工具兼容性问题可以参考 这里

参考来源

1Password SSH agent
Turn on the 1 password
SSH agent config file

相关推荐

暂无相关文章!

暂无评论

发表评论