文章

SSH相关

本文主要介绍ssh密钥对的生成,以及如何通过ssh密钥对进行无密码登陆vps,多台vps密钥对管理,git配置等,并且非对称算法加密相较于密码登陆更为安全。本文操作环境为macos

一、检查是否存在密钥对?

打开终端输入

1
ls -al ~/.ssh

如果出现 ` such file or directory`,则为不存在。如果存在则可直接跳过密钥对生成

二、生成ssh密钥对

打开终端,生成密钥对(ed25519优于rsa故择之,注意修改邮箱备注)

1
ssh-keygen -t ed25519 -C "[email protected]"

操作完后会在 ~/.ssh 目录中生两个密钥文件,id_ed25519 为私钥,id_ed25519.pub 为公钥

三、配置git

配置git commit用户名和邮箱(自行修改

1
2
git config --global user.name "username"
git config --global user.email "[email protected]"

查看公钥

1
cat ~/.ssh/id_ed25519.pub

复制公钥

1
pbcopy < ~/.ssh/id_ed25519.pub

打开github,点击右上角头像,点击 Settings->SSH and GPG keys->New SSH key,在key中填入刚刚复制的公钥,点击保存

检验是否添加成功

四、ssh连接vps

4.1 上传公钥

将刚生成的公钥上传至你的vps中,可以直接使用 ssh-copy-id操作

1
ssh-copy-id -i ~/.ssh/id_ed25519.pub User@HostName -p Port

-i为指定公钥路径,后面的~/.ssh/id_ed25519.pub公钥路径。

User 为用户名,HostName 为 IP 地址,Port 为端口号。

ssh-copy-id作用就是将本地~/.ssh/id_ed25519.pub中的公钥内容放入vps~/.ssh/authorized_keys中,并设置相应的读取权限

4.2 连接VPS

1
ssh User@HostName -p Port

该操作会默认使用.ssh目录下的所有私钥进行尝试匹配

如果我的私钥不在ssh目录下,也可指定私钥

1
ssh -i ~/.ssh/k3e1 User@HostName -p Port

指定了~/.ssh/k3e1为私钥

4.3 设置多台vps

如果你有多个 VPS 使用不同密钥,那么使用 SSH 配置文件 ( ~/.ssh/config ) 进行管理是一种优雅且灵活的方式。这相当于在类似 Xshell 这样的图形化 SSH 工具中对每个 SSH 会话连接进行单独设置并保存起来,省去了重复输入复杂参数的过程。

SSH 配置文件默认是不存在的,所以使用nano编辑器创建并编辑:

1
nano ~/.ssh/config

然后参照下面的例子进行填写。

1
2
3
4
5
6
7
8
9
10
11
12
13
Host K3E1_VPS1
    HostName 233.233.233.233
    Port 2333
    User root
    IdentityFile "~/.ssh/id_ed25519"
    IdentitiesOnly yes

Host K3E1_VPS2
    HostName 66.66.66.66
    Port 6666
    User k3e1
    IdentityFile "~/.ssh/id_rsa"
    IdentitiesOnly yes

Host 别名 HostName 主机名,可以用 IP 地址或域名 Port 端口,不填写默认为 22 User 用户名 IdentityFile 私钥的路径,可指定多个私钥,在连接的过程中会依次尝试。 IdentitiesOnly 只接受 SSH key 登录

编辑好保存并退出,然后设置权限,不然可能无法正常使用。

1
chmod 600 ~/.ssh/config

当以上操作完成,以后登录 VPS 就只需要在终端内输入 ssh Host 就可以登录到 VPS ,就像下面这样:

1
ssh K3E1_VPS1

4.4 禁用密码登录

在确认使用密钥能正常登录后,为了提高 VPS 的安全性建议禁用密码登录。

执行以下命令,对 sshd 配置文件 (/etc/ssh/sshd_config) 进行修改。

1
sudo sed -i '/PasswordAuthentication /c\PasswordAuthentication no' /etc/ssh/sshd_config

最后重启 sshd 服务,使配置生效。

1
sudo service sshd restart
本文由作者按照 CC BY 4.0 进行授权