参考资料
目录
一. 密钥生成
1.1 生成工具
1.1.1 OpenSSH
⏹Win10系统默认安装了,OpenSSH
⏹在C:\Windows\System32\OpenSSH\
路径中,可以看到可执行文件。
1.1.2 Git
⏹如果系统中安装了Git,那么在默认的安装路径C:\Program Files\Git\usr\bin
中也可找到ssh
可实行文件。
1.2 生成命令
⏹在命令行窗口,输入下面的命令,即可生成一对公钥和私钥。
-
-C
:为密钥添加注释,通常用于标识密钥。如果忽略此选项,则会使用用户名@主机名
来当做密钥注释添加到密钥中。 -
-f
:用户指定密钥生成的路径和密钥名称,默认情况下,密钥将保存到~/.ssh/id_rsa
(私钥)~/.ssh/id_rsa.pub
(公钥)
# windows中
ssh-keygen -t rsa -C "fengyehong123@example.com" -f C:\Users\用户名称\.ssh\ubuntu22_key
# linux中
ssh-keygen -t rsa -C "fengyehong123@example.com" -f ~/.ssh/id_rsa
1.3 注意事项
⏹在Windows中,如果当前的用户名中包含汉字,在未指定密钥生成的路径的情况下,会乱码。
⏹使用Git自带的ssh工具进行生成,可以避免汉字用户名的乱码问题,但是默认情况下Win10自带的OpenSSH
,在环境变量中的权限高于Git
中的权限,所以直接在命令行中输入ssh-keygen
命令,调用的是OpenSSH
的ssh命令,并非Git
中的命令。
1.4 解决路径中的用户名乱码
⏹方式1:指定生成密钥的路径中不包含汉字
⏹方式2:直接使用git命令行窗口进行生成(此时使用的是git的ssh工具)
⏹方式3:修改环境变量,降低OpenSSH
工具的优先顺(此时使用的是git的ssh工具)
二. 将公钥配置到目标服务,免密登录
2.1 方式1 ssh-copy-id命令行工具
⏹通过ssh-copy-id指定本地公钥的路径,传输到目标服务器上
ssh-copy-id -i ~/.ssh/id_rsa.pub apluser@192.168.118.136
⏹下图所示,通过Git的命令行窗口,将公钥配置到目标服务器上
⏹公钥传输完毕之后,在目标服务器的~/.ssh/authorized_keys
路径中可以看到。
2.2 方式2 手动添加
⏹可以将公钥上传到服务器,然后添加到authorized_keys
文件中
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
⏹由于是手动添加,所以需要在服务器端重启一下ssh服务
/etc/init.d/ssh restart
2.3 效果
⏹如果我们的私钥存储在当前用户的.ssh
文件夹中,输入ssh apluser@192.168.118.136
即可免密登录。
⏹如果我们的私钥并不存储在当前用户的.ssh
文件夹中,指定私钥的位置,即可完成免密登录。
ssh apluser@192.168.118.136 -i 私钥的位置
三. 免密登录config文件配置
⏹config
Host ubuntu_22
HostName 192.168.118.136
User apluser
Port 22
StrictHostKeyChecking no
# 指定密钥的位置
IdentityFile D:\id_rsa
3.1 效果
⏹如下图所示,直接通过配置文件中的别名,完成免密登录。
四. 服务器端公钥位置修改
⏹在服务器端的/etc/ssh/sshd_config
文件中,有关于认证文件的配置
如果不想让公钥存储在默认路径下,可修改AuthorizedKeysFile
的相关内容,指定公钥路径
apluser@ubuntu221:~$ ls -l /etc/ssh/sshd_config
-rw-r--r-- 1 root root 3255 Aug 9 02:33 /etc/ssh/sshd_config
apluser@ubuntu221:~$
apluser@ubuntu221:~$ grep AuthorizedKeysFile /etc/ssh/sshd_config
#AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
⏹修改sshd_config
配置文件,需要root用户权限
%h
:当前用户的主目录
⏹修改完毕之后,同样需要在服务器端重启一下ssh服务,确保配置文件实时反映。
/etc/init.d/ssh restart