参考资料
- ~/.ssh/configについて
- ~/.ssh/configを使ってSSH接続を楽にする
- .ssh/configファイルでSSH接続を管理する
目录
- 一. 密钥生成
- 1.1 生成工具
- 1.1.1 OpenSSH
- 1.1.2 Git
- 1.2 生成命令
- 1.3 注意事项
- 1.4 解决路径中的用户名乱码
- 二. 将公钥配置到目标服务,免密登录
- 2.1 方式1 ssh-copy-id命令行工具
- 2.2 方式2 手动添加
- 2.3 效果
- 三. 免密登录config文件配置
- 3.1 配置文件内容
- 3.2 效果
- 四. 服务器端公钥位置修改
- 五. `REMOTE HOST IDENTIFICATION HAS CHANGED!`问题
一. 密钥生成
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:为密钥添加注释,通常用于标识密钥。如果忽略此选项,则会使用用户名@主机名来当做密钥注释添加到密钥中。-t:指定密钥算法,可以省略,当不指定算法的时候 ,默认使用比较新的 ed25519 算法-f:用户指定密钥生成的路径和密钥名称,默认情况下,密钥将保存到~/.ssh/id_rsa(私钥)~/.ssh/id_rsa.pub(公钥)
# ################################### rsa已经属于比较老的算法了# 当不指定算法的时候# 默认使用比较新的 ed25519 算法# ##################################ssh-keygen-C"fengyehong123@example.com"# windows中ssh-keygen-trsa-C"fengyehong123@example.com"-fC:\Users\用户名称\.ssh\ubuntu22_key# linux中ssh-keygen-trsa-C"fengyehong123@example.com"-f~/.ssh/id_rsa1.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- 如果生成了密钥之后,将私钥放到了其他文件夹下的话
- 需要使用
-f配置项强制指定只传输公钥,否则会报错找不到私钥
ssh-copy-id-i-f~/.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 restart2.3 效果
⏹如果我们的私钥存储在当前用户的.ssh文件夹中,输入ssh apluser@192.168.118.136即可免密登录。
⏹如果我们的私钥并不存储在当前用户的.ssh文件夹中,指定私钥的位置,即可完成免密登录。
sshapluser@192.168.118.136-i私钥的位置三. 免密登录config文件配置
3.1 配置文件内容
⏹config
Host ubuntu_22 HostName192.168.118.136 User apluser Port22StrictHostKeyChecking no# 指定密钥的位置IdentityFile D:\id_rsa3.2 效果
⏹如下图所示,直接通过配置文件中的别名,完成免密登录。
四. 服务器端公钥位置修改
⏹在服务器端的/etc/ssh/sshd_config文件中,有关于认证文件的配置
如果不想让公钥存储在默认路径下,可修改AuthorizedKeysFile的相关内容,指定公钥路径
apluser@ubuntu221:~$ls-l/etc/ssh/sshd_config -rw-r--r--1root root3255Aug902:33 /etc/ssh/sshd_config apluser@ubuntu221:~$ apluser@ubuntu221:~$grepAuthorizedKeysFile /etc/ssh/sshd_config#AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2⏹修改sshd_config配置文件,需要root用户权限
%h:当前用户的主目录
⏹修改完毕之后,同样需要在服务器端重启一下ssh服务,确保配置文件实时反映。
/etc/init.d/ssh restart五.REMOTE HOST IDENTIFICATION HAS CHANGED!问题
⏹当第一次连接某个 SSH 服务器时,ssh 或 sftp 会把远程服务器的 host key(主机公钥)指纹 存在本地的~/.ssh/known_hosts文件中。
以后再次连接该主机时,会用保存的主机公钥与服务器当前提供的公钥进行比较:
- 如果匹配 ✅,则连接继续。
- 如果 不匹配 ❌(比如远程主机重新安装、密钥更新或 IP 被他人占用),就会出现类似于下面的警告
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. The fingerprint for the RSA key sent by the remote host is SHA256:OYtwkILXy0dkzCTnO+2YclxZVOzQw9SzBHuaF3ve6Is. Please contact your system administrator. Add correct host key in /c/Users/Admin/.ssh/known_hosts to get rid of this message. Offending RSA key in /c/Users/Admin/.ssh/known_hosts:2 Host key for [192.168.3.23]:2222 has changed and you have requested strict checking. Host key verification failed. Connection closed
⏹在确保要连接的远程服务器安全的前提下,可通过如下方式解决
- 删除host文件中的旧主机的记录
ssh-keygen-R[192.168.3.23]:2222 - 再一次连接目标主机时,会出现类似于下面这种提示
The authenticity of host '[192.168.3.23]:2222' can't be established. RSA key fingerprint is SHA256:OYtwkILXy0dkzCTnO+2YclxZVOzQw9SzBHuaF3ve6Is. Are you sure you want to continue connecting (yes/no)? - 输入
yes之后它会把新的host key存入known_hosts文件中,此后不会再有提示(除非主机密钥再次变化)。