Linux

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > Linux > Linux ssh免密登录配置

Linux ssh免密登录配置全过程

作者:fengyehongWorld

本文主要介绍了如何在Windows系统中生成SSH密钥对,并将其配置到目标服务器以实现免密登录,内容涵盖了密钥生成工具、生成命令、注意事项、公钥配置方法、config文件配置、服务器端公钥位置修改以及解决“REMOTEHOSTIDENTIFICATIONHASCHANGED!”问题的方法

一. 密钥生成

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:用户指定密钥生成的路径和密钥名称,默认情况下,密钥将保存到

# 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文件配置

3.1 配置文件内容

config

Host ubuntu_22
  HostName 192.168.118.136
  User apluser
  Port 22
  StrictHostKeyChecking no
  # 指定密钥的位置
  IdentityFile D:\id_rsa

3.2 效果

如下图所示,直接通过配置文件中的别名,完成免密登录。

四. 服务器端公钥位置修改

在服务器端的/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用户权限

修改完毕之后,同样需要在服务器端重启一下ssh服务,确保配置文件实时反映。

/etc/init.d/ssh restart

五.REMOTE HOST IDENTIFICATION HAS CHANGED!问题

当第一次连接某个 SSH 服务器时,ssh 或 sftp 会把远程服务器的 host key(主机公钥)指纹 存在本地的 ~/.ssh/known_hosts 文件中。

以后再次连接该主机时,会用保存的主机公钥与服务器当前提供的公钥进行比较

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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 文件中,此后不会再有提示(除非主机密钥再次变化)。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文