ssh 非对称加密

ssh 非对称加密

ssh服务端的配置文件目录

bash 复制代码
在/etc/ssh
ll /etc/ssh目录下有三对非对称的公钥和私钥
第一对:
-rw-r-----. 1 root ssh_keys    480 5月   9 19:33 ssh_host_ecdsa_key
-rw-r--r--. 1 root root        162 5月   9 19:33 ssh_host_ecdsa_key.pub
第二对
-rw-r-----. 1 root ssh_keys    387 5月   9 19:33 ssh_host_ed25519_key
-rw-r--r--. 1 root root         82 5月   9 19:33 ssh_host_ed25519_key.pub
第三对
-rw-r-----. 1 root ssh_keys   2578 5月   9 19:33 ssh_host_rsa_key
-rw-r--r--. 1 root root        554 5月   9 19:33 ssh_host_rsa_key.pub

服务端有这么多对公私钥,是为了适配不同的客户端链接所准备的


目录下的 sshd_config 是ssh服务端的配置文件
ssh_config 是ssh 客户端的配置文件

Linux一般是自带ssh 客户端以及服务器端的。Windows啥都不带
Linux服务器至少要有一对公私钥,ssh才能链接。

# 在服务端通过查看私钥生成的秘钥值,当客户端链接服务器端的时候,就可以凭借这个秘钥值来确定客户端链接的服务端就是可信任的。而不是被黑客所篡改的服务器Ip地址。
[root@SSHServer ~]# ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key
256 SHA256:0yrLcZOy3R0VfHEiClKUjfZvEMrImQChS1rJunoRBU8 /etc/ssh/ssh_host_ecdsa_key.pub (ECDSA)
bash 复制代码
当你通过秘钥对链接后,会在客户端的家目录~/.ssh/下出现一个kown_hosts文件
[root@SSHCilent ~]# ll ~/.ssh/
总用量 4
-rw-r--r--. 1 root root 177 8月   1 19:23 known_hosts
这个文件就是公钥
这个就是你拿到的服务器端分配给客户端所使用的加密私钥的公钥。
bash 复制代码
在生产环境可能会有多态servers,我们难免每次都需要指纹认证,所以,可以使用一个参数不再指定指纹登录。

# 假设此时我们删掉 这个known_hosts文件,那么如之前所理解,当我们ssh的时候,还是得需要输入yes,
但是当我们加上 -o StrictHostKeyChecking=no 参数后,就不需要输入指纹验证了,客户端默认完全信任服务器端,这个在生产环境中
用的很多。
但是这并不意味着,客户端没有公钥了,你再去ssh目录下看,还是会看到kown_hosts文件,里面还是有服务器端发过来的公钥。

[root@SSHCilent ~]# rm -rf ~/.ssh/known_hosts 
[root@SSHCilent ~]# ssh -o StrictHostKeyChecking=no 192.168.190.135
Warning: Permanently added '192.168.190.135' (ECDSA) to the list of known hosts.
root@192.168.190.135's password: 
bash 复制代码
当然,虽然不用输入yes了。但是还是需要输入密码,这就涉及到了客户端免密登录

ssh实现免密登录

bash 复制代码
1. 首先,服务器端的ssh的服务器配置文件里有#PubkeyAuthentication yes 参数,默认是需要公钥认证的,
我们可以不适用密码认证,来直接使用公钥认证的方式就可以实现免密登录,
当我们将yes 改为No的时候,就说明我们实现了客户端到服务器端的免密登录

基于公钥的认证方式

bash 复制代码
# 免密登录只是基于公钥认证的一个附带属性,基于公钥方式的认证方式更安全
1.首先要将客户端的公钥上传到服务器
	1.1 在客户端上通过ssh-keygen命令生成非对称加密秘钥
	[root@SSHCilent ~]# ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):  # 密钥对存放目录
Enter passphrase (empty for no passphrase):  # 私钥的密码,可以设置为空
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:iCDvofEJmCSIkeXll4or5YEoXR/60XIsk9/YBUNl6ns root@SSHCilent
The key's randomart image is:
+---[RSA 3072]----+
|.o. .     ..o    |
|+o o   . . o     |
|=.o o +   +      |
|=* + * * . o     |
|O B + O S . .    |
|.O = . B + o     |
|o *   . o + E    |
| .         .     |
|                 |
+----[SHA256]-----+
	
[root@SSHCilent ~]# ls .ssh/
id_rsa  id_rsa.pub  known_hosts
	
2.客户端访问服务器端的时候,采用基于公钥的认证方式就可以了
	2.1 上传公钥到服务器,(上传到哪里呢?服务器的ssh配置文件里有指定路径)
	AuthorizedKeysFile      .ssh/authorized_keys
	上面这个参数就指定了客户端的公钥存放在服务器端的位置
	[root@SSHServer ~]# pwd
	/root
	[root@SSHServer ~]# mkdir .ssh
	[root@SSHServer ~]# cd .ssh/
	[root@SSHServer .ssh]# touch authorized_keys
	[root@SSHServer .ssh]# ls
	authorized_keys
	

# 将客户端的秘钥传上去。
[root@SSHCilent .ssh]# cat id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQD049kl6fFMRUGhXtlFIeNP1FXsJitAWuEOw5bNBRnCDAhkTr+OTbzcMEvc1fXDV3OIfKEQ2rS/Hmbd2XBsJV6Aw+k3lyIm0HBDvi6b2vHVrb0tFrpJcCtVr7lcKnkW0wu/9tkFht6rsHt35YDRUFQBQYmNu3IGB9FIgPCi74yuyvT1r+QrXK7PlmEL1NQEYLVL1dcO02OCv9CRmqzIfDokYMnPvjkYva64smh3HqlzS9FCEn9vnODiOG6HAy7WqXb4bg5+VOaoy2yngZUQoN+uA4iZRYtA5XEyZ4hBt1DFfqe7+ikF7r9ghJRWaH2/y262LzZEi7H/XF3tT0KRgTzTyJmc8KkLPxUqVRFv7Px2mep9OueamVdGi/wYwGD0Nec1fO7vp1wmBmIMBc+cchHpimsdQmpsC5npX0xOfEt/moVOBbeSqtI0ZlR49Lbj+21O7TFPGXjVeIm0xecM1fKUOv4ilJeoKmaXM4WyRxs+UIzuBkd61WBllh0xoLphXd0= root@SSHCilent
 
怎么传:
1.直接复制粘贴到服务端的authorized_keys文件里(很原始,不建议这样做)
2. 利用ssh-copy-id 上传(推荐)
[root@SSHCilent .ssh]# ssh-copy-id admin@192.168.190.135


此时再次ssh 登录,即可实现免密登录
[root@SSHCilent .ssh]# ssh admin@192.168.190.135  # 这里会输入一次密码,即admin的密码即可
Activate the web console with: systemctl enable --now cockpit.socket
Last login: Thu Aug  1 19:19:19 2024
[admin@SSHServer ~]$ 


# ssh可以远程执行命令
[root@SSHCilent .ssh]# ssh admin@192.168.190.135 pwd
/home/admin
[root@SSHCilent .ssh]# ssh admin@192.168.190.135 ls

ssh实用工具

bash 复制代码
scp命令
# 1.在客户端创建一个test 文件,将test文件上传到服务端
# : 冒号分割路径
[root@SSHCilent ~]# scp test root@192.168.190.135:~
test                                                                                                     100%    0     0.0KB/s   00:00    

# 在服务器端可以看到上传上去了
[root@SSHServer ~]# ll  
总用量 16
-rw-r--r--. 1 root root    0 8月   1 22:58 test

# 2. 也可以将服务端的文件下发到客户端
在服务器端家目录创建一个test1测试文件
然后再客户端执行scp 命令
[root@SSHCilent ~]# scp root@192.168.190.135:/root/test1 .
test1                                                                                                    100%    0     0.0KB/s   00:00    
[root@SSHCilent ~]# ll
-rw-r--r--. 1 root root    0 8月   1 23:02 test1
相关推荐
XIAOHEZIcode5 小时前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户03284722207021 小时前
如何搭建本地yum源(上)
运维
大树884 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠4 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质4 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
开发者联盟league4 天前
安装pnpm
ssh
Inhand陈工4 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智4 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_4 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉4 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造