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中填入刚刚复制的公钥,点击保存
检验是否添加成功
1
ssh -T [email protected]
四、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
端口,不填写默认为 22User
用户名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