129 lines
4.2 KiB
Markdown
129 lines
4.2 KiB
Markdown
# SSH舍弃密码,拥抱密钥
|
||
## 前提条件
|
||
使用**ROOT**用户(普通用户请自己加sudo)、客户端使用Windows PowerShell终端、服务端使用Debian12+或是Ubuntu24+
|
||
## 客户端操作
|
||
### 创建密钥对
|
||
随便在哪按 WIN + X 再按 I 打开PowerShell终端
|
||
进入用户的.ssh文件夹
|
||
```shell
|
||
cd ~\.ssh
|
||
```
|
||
创建密钥对,使用椭圆加密算法,相比RSA更加短小精悍
|
||
```shell
|
||
ssh-keygen -t ed25519
|
||
```
|
||
输出Enter file in which to save the key,是对密钥对进行命名,我这里输入test
|
||
之后输出Enter passphrase (empty for no passphrase),是对私钥进行加密,输入私钥的密码(不会显示),不设置就按Enter跳过
|
||
然后确认密码,依旧按Enter跳过
|
||
出现一个方框图形,表示创建成功
|
||
之后 ~\.ssh 文件夹中会出现一个 test 私钥文件和一个 test.pub 公钥文件
|
||
至此,客户端的操作暂时结束
|
||
|
||
## 服务端操作
|
||
### 上传公钥至服务器
|
||
#### 创建实例阶段
|
||
在创建实例阶段,如阿里云服务器,可以在**管理设置-登录凭证**中选择密钥对;**登录名**选择root;**密钥**对选择右边创建密钥对
|
||
创建密钥对界面,密钥对名称随意;创建类型选择导入已有密钥对,
|
||
在客户端Windows电脑中进入 ~\.ssh文件夹中,找到第一步创建的test.pub,用任意编辑器打开后,复制其内容到公钥内容框中,标签键随意,
|
||
然后回到实例创建页面,在密钥对选择刚刚创建的密钥对即可
|
||
#### 已有服务器
|
||
使用SSH密码登录到服务器,切换到ROOT用户
|
||
```shell
|
||
sudo -i
|
||
```
|
||
##### 复制公钥到服务器
|
||
进入/root/.ssh文件夹(普通用户进入到~/.ssh文件夹中)
|
||
```shell
|
||
cd /root/.ssh #root用户
|
||
#cd ~/.ssh #普通用户
|
||
```
|
||
创建或编辑 authorized_keys 文件
|
||
```shell
|
||
vim authorized_keys #没有会自动创建
|
||
```
|
||
按 I 进入编辑模式,将公钥内容复制进去
|
||
按 Esc ,输入 :wq 保存并退出
|
||
|
||
##### 编辑SSH-SERVER配置文件
|
||
进入/etc/ssh文件夹
|
||
```shell
|
||
cd /etc/ssh
|
||
```
|
||
这一步,有可能服务器没有安装SSH服务端,就没有sshd_config文件
|
||
安装ssh服务端
|
||
```shell
|
||
apt intsall openssh-server #安装openssh服务端
|
||
```
|
||
验证服务状态
|
||
```shell
|
||
systemctl status ssh #查看SSH服务运行状态,有些老版会是sshd
|
||
```
|
||
看到绿色的active(running)说明正常运行
|
||
按Ctrl + C退回到命令行
|
||
查看ssh目录下的文件
|
||
```shell
|
||
ls
|
||
```
|
||
看到有了sshd_config 和 sshd_config.d即可
|
||
编辑sshd_config文件
|
||
```shell
|
||
vim sshd_config
|
||
```
|
||
同样按 I 进入编辑模式,并确保下列三个参数如下
|
||
```shell
|
||
PermitRootLogin yes #允许使用ROOT用户登录
|
||
PubkeyAuthentication yes #使用密钥对
|
||
PasswordAuthentication no #禁用密码
|
||
```
|
||
按 Esc 退出编辑模式,输入 :wq 保存并退出
|
||
##### 重启SSH-SERVER服务
|
||
一般使用(老版)
|
||
```shell
|
||
systemctl restart sshd
|
||
```
|
||
不行就试试(新版)
|
||
```shell
|
||
service ssh restart
|
||
```
|
||
##### **不要断开SSH连接,防止配置有问题连接不上**
|
||
## 使用密钥对进行连接
|
||
### 直接连接
|
||
新开一个PowerShell终端
|
||
```shell
|
||
ssh -i ~/.ssh/test root@192.168.21.5
|
||
```
|
||
输出 Enter passphrase for key 提示输入私钥密码(输入的内容不会显示),之前没设置就直接按 Enter ;不出意外就可以连接上了
|
||
### 编辑config文件进行简便连接
|
||
**注意:** 只用使用Windows的终端才能简便连接,<mark style="background: #ADCCFFA6;">使用mobaxterm等ssh软件这个配置是没用的</mark>
|
||
在Windows客户端中,进入 ~\.ssh 文件夹
|
||
|
||
```shell
|
||
cd ~\.ssh
|
||
```
|
||
使用记事本编辑config文件
|
||
```shell
|
||
noteapd config
|
||
```
|
||
格式如
|
||
```shell
|
||
Host test
|
||
HostName 192.168.21.5
|
||
IdentityFile ~/.ssh/test
|
||
User root
|
||
```
|
||
如果端口不是22,则需要加上端口,如使用222端口
|
||
```shell
|
||
Host test
|
||
HostName 192.168.21.5
|
||
IdentityFile ~/.ssh/test
|
||
Port 222
|
||
User root
|
||
```
|
||
保存
|
||
然后在PowerShell终端中就可以进行简便连接如
|
||
```shell
|
||
ssh test
|
||
```
|
||
这里的test是 config 文件 Host 后的字符,可以用Emoji表情
|
||
**注意:** 在使用SSH密钥对克隆GitHub或是其他git相关网站时,Host最好设置为网站的域名,你问为什么?时间的教训罢了~
|
||
## 至此教程结束 |