Linux的SSH密钥认证快捷配置

本文适用:rhel5-9系列,同类系统(CentOS,AlmaLinux,RockyLinux等)、debian系(ubuntu)等也可参照

文档形成时期:2012-2024年

因系统版本不同,配置应略有差异,本文没有在细节上区分,但实践中发现均可配置成功

文章目录

Linux客户端密钥认证配置

一键配置方式

配置和生成如下,可以一键拷贝到终端运行

bash 复制代码
# 修改加密码强度:
sed -i '/ServerKeyBits/c\ServerKeyBits 2048' /etc/ssh/sshd_config
service sshd reload # 或 systemctl reload sshd
# 配置修改:
# 修改/etc/ssh/ssh_config或拷贝一份儿到当前用户.ssh下
cp /etc/ssh/ssh_config ~/.ssh/config
sed -i '/HostbasedAuthentication/c\HostbasedAuthentication yes' ~/.ssh/config
sed -i '/ConnectTimeout/c\ConnectTimeout 7' ~/.ssh/config
sed -i '/IdentityFile \~\/\.ssh\/id_rsa/c\IdentityFile \~\/\.ssh\/id_rsa' ~/.ssh/config
# sed -i '/StrictHostKeyChecking/c\StrictHostKeyChecking no' ~/.ssh/config # 在某些全自动化场景下,不希望检测服务端公钥,便可配置该项
if ( ! grep -q "UserKnownHostsFile /dev/null" ~/.ssh/config ); then echo "UserKnownHostsFile /dev/null" >> ~/.ssh/config; fi 
# 参考:https://blog.csdn.net/yasaken/article/details/7348441
# 配置完成

# 生成密钥和公钥
# -b 指定加密位数,默认也是2048;-N是指定空密码;-f是指定密钥生成的文件,不能使用~这个的主目录符号,不识别;
# -C 只是指定评论,在公钥的末尾能看到,改动评论不影响密钥使用;
if [ ! -f ~/.ssh/id_rsa ]; then ssh-keygen -b 2048 -t rsa -f "/root/.ssh/id_rsa" -N "" -C "root@`ip addr show dev eth0 | grep "inet" | awk -F ' ' '{print $2}' | cut -d'/' -f 1 | head -1 2> /dev/null`"; else echo "This machine already has this rsa, do nothing"; fi

# 不判断,直接生成:
# ssh-keygen -b 2048 -t rsa -f "/root/.ssh/id_rsa" -N "" -C "root@localhost"

交互式生成方式

下面是交互式生成过程:

在SSH客户端生成公钥和私钥(不是在服务端)(生成的是用户密钥,有别于主机密钥)

bash 复制代码
ssh-keygen -t rsa

一路回车就行

Enter file in which to save the key (/root/.ssh/id_rsa):

回车,把key放到哪个位置及指定文件名,默认就行

Enter passphrase (empty for no passphrase):

给key加密,可设可不设,就是打开密钥和使用密钥的时候需要密码,如果设,必须4位以上,建议不要设

Enter same passphrase again:

在输入刚才的密码

查看生成的密钥对

bash 复制代码
ls ~/.ssh

id_rsa 密钥

id_rsa.pub 公钥

Linux服务端密钥认证配置

编辑 /etc/ssh/sshd_config 文件,打开密钥登录功能

bash 复制代码
sed -i '/#RSAAuthentication/c\RSAAuthentication yes' /etc/ssh/sshd_config
sed -i '/#PubkeyAuthentication/c\PubkeyAuthentication yes' /etc/ssh/sshd_config
sed -i '/#AuthorizedKeysFile/c\AuthorizedKeysFile      .ssh/authorized_keys' /etc/ssh/sshd_config
service sshd reload
# su - user # 如果是为普通用户生成,需要切换
mkdir ~/.ssh
touch ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
service sshd reload

vi ~/.ssh/authorized_keys

#追加ssh客户端的公钥,注意是一个一行

当你完成全部设置,并以密钥方式登录成功后,再禁用密码登录(可选):

PermitRootLogin yes 允许ROOT

PasswordAuthentication yes

改为

PasswordAuthentication no

检查配置:

sshd -t

最后,重载 SSH 服务:

service sshd reload #rh6或更低版本

systemctl reload sshd #rh7+

直接执行,网络不会断掉的。

vi ~/.ssh/authorized_keys

#把客户端的公钥放到服务端的 ~/.ssh/authorized_keys (不是客户端的哟)

cat ~/.ssh/id_rsa.pub

#拷贝内容过去也可以(公钥没有换行,只能是一行哟,注意)

或这样下发到客户端:

root@localhost \~\]# ssh-copy-id -i /root/.ssh/id_rsa.pub -p 22 root@1.2.3.4 ### 客户端登陆服务端 客户端首次密钥方式登陆服务端,需要加入服务端的公钥到客户端的\~/.ssh/known_hosts,这个过程一般是自动提示,你只需输入yes 然后该客户端登陆该服务端就可以不需要密码验证了,当然密码认证和密钥认证可以同时开启,然后由客户端的连接方式决定。 #### 无提示登陆示例 ```bash ssh -q -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=7 -o HostbasedAuthentication=yes -o IdentityFile=~/.ssh/id_rsa -p 22 root@remoteip "{ ifconfig; }" ``` ## SSH双向密钥登陆 如果把服务端和客户端角色换一下,再按以上操作步骤实施一遍,即可实现双向密钥认证登陆。

相关推荐
looking_for__18 分钟前
【Linux】应用层自定义协议与序列化
linux·服务器·网络
云中飞鸿18 分钟前
VS编写QT程序,如何向linux中移植?
linux·开发语言·qt
晚风_END24 分钟前
Linux|操作系统|elasticdump的二进制方式部署
运维·服务器·开发语言·数据库·jenkins·数据库开发·数据库架构
嵌入小生00724 分钟前
Standard IO -- Continuation of Core Function Interfaces (Embedded Linux)
linux·vim·嵌入式·标准io·vscode
Zach_yuan25 分钟前
传输层之TCP/UDP 核心原理全解析:从协议基础到实战机制
linux·网络协议·tcp/ip·udp
独自归家的兔26 分钟前
Ubuntu 系统 systemd timers 详解:替代 crontab 的定时任务进阶方案
linux·运维·ubuntu
Lsir10110_27 分钟前
【Linux】深入解剖页表——分页式存储
linux·运维·服务器
victory043128 分钟前
服务器病毒处理记录
运维·服务器·chrome
爱吃生蚝的于勒28 分钟前
【Linux】线程概念(一)
java·linux·运维·服务器·开发语言·数据结构·vim
风指引着方向29 分钟前
昇腾 AI 开发生产力工具:CANN CLI 的高级使用与自动化脚本编写
运维·人工智能·自动化