Linux ssh 免密登录配置

参考资料

  1. ~/.ssh/configについて
  2. ~/.ssh/configを使ってSSH接続を楽にする
  3. .ssh/configファイルでSSH接続を管理する

目录

  • [一. 密钥生成](#一. 密钥生成)
    • [1.1 生成工具](#1.1 生成工具)
      • [1.1.1 OpenSSH](#1.1.1 OpenSSH)
      • [1.1.2 Git](#1.1.2 Git)
    • [1.2 生成命令](#1.2 生成命令)
    • [1.3 注意事项](#1.3 注意事项)
    • [1.4 解决路径中的用户名乱码](#1.4 解决路径中的用户名乱码)
  • [二. 将公钥配置到目标服务,免密登录](#二. 将公钥配置到目标服务,免密登录)
    • [2.1 方式1 ssh-copy-id命令行工具](#2.1 方式1 ssh-copy-id命令行工具)
    • [2.2 方式2 手动添加](#2.2 方式2 手动添加)
    • [2.3 效果](#2.3 效果)
  • [三. 免密登录config文件配置](#三. 免密登录config文件配置)
    • [3.1 效果](#3.1 效果)
  • [四. 服务器端公钥位置修改](#四. 服务器端公钥位置修改)

一. 密钥生成

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(公钥)
bash 复制代码
# 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指定本地公钥的路径,传输到目标服务器上

bash 复制代码
ssh-copy-id -i ~/.ssh/id_rsa.pub apluser@192.168.118.136

⏹下图所示,通过Git的命令行窗口,将公钥配置到目标服务器上

⏹公钥传输完毕之后,在目标服务器的~/.ssh/authorized_keys路径中可以看到。

2.2 方式2 手动添加

⏹可以将公钥上传到服务器,然后添加到authorized_keys文件中

bash 复制代码
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

⏹由于是手动添加,所以需要在服务器端重启一下ssh服务

bash 复制代码
/etc/init.d/ssh restart

2.3 效果

⏹如果我们的私钥存储在当前用户的.ssh文件夹中,输入ssh apluser@192.168.118.136即可免密登录。

⏹如果我们的私钥并不存储在当前用户的.ssh文件夹中,指定私钥的位置,即可完成免密登录。

bash 复制代码
ssh apluser@192.168.118.136 -i 私钥的位置

三. 免密登录config文件配置

⏹config

bash 复制代码
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的相关内容,指定公钥路径

bash 复制代码
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服务,确保配置文件实时反映。

bash 复制代码
/etc/init.d/ssh restart
相关推荐
虎头金猫4 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
AI职业加油站4 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
此冬歌咏4 天前
K8s 节点故障实战:优雅驱逐 31 秒,硬故障 331 秒,以及那个永远 Pending 的 Pod
运维·k8s
-梅4 天前
linux(8) 软硬链接
linux·运维·服务器
张洛闻Eren5 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
其实防守也摸鱼5 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
布裘5 天前
【银河麒麟】V4桌面图标消失,右击鼠标没反应排查
运维·银河麒麟·桌面环境
懂软件的胡子个哥5 天前
微信机器人为什么需要“回复候选”而不是所有 AI 内容直接发送
运维·微信·自动化·wechatapi·个人微信号二次开发
云贝贝贝5 天前
腾讯云 TDSQL(MySQL 版)性能优化与慢查询排障实战 6 招
运维·腾讯云
Lsetea5 天前
证书没到期却报certificate has expired:OpenSSL定位中间证书与系统时间
运维·https·ssl证书·openssl·证书链