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
相关推荐
猫猫不是喵喵.1 小时前
【Linux】Linux入门实操——rpm与yum
linux·运维·服务器
枫叶丹44 小时前
【在Linux世界中追寻伟大的One Piece】Reactor反应堆模式
linux·运维·服务器
誓约酱4 小时前
Linux系统常用指令
linux·运维·服务器·c++
EutoCool4 小时前
Linux:文件管理(一)
linux·运维·服务器
小狮子安度因5 小时前
Linux进程管理查找相关命令
linux·运维·服务器
Mr. bigworth6 小时前
Linux安装RabbitMQ
linux·运维·rabbitmq
乐维_lwops6 小时前
双因子认证:统一运维平台安全管理策略
运维·服务器·安全
叫我龙翔6 小时前
【项目日记】仿mudou的高并发服务器 --- 实现缓冲区模块,通用类型Any模块,套接字模块
linux·运维·服务器·网络·c++
不撸先疯。7 小时前
docker镜像源配置、换源、dockerhub国内镜像最新可用加速源(仓库)
运维·docker·容器·dockerhub
Stark-C7 小时前
功能齐全,支持协作 | Docker部署一款支持多人共享的私密浏览器『n.eko』
运维·docker·容器