SSH 公钥私钥

技术博客 (228) 2023-10-09 09:01:01

一、简介

一、SSH key简介
要了解SSH key简介,首先得熟悉SSH,SSH 密钥对可以让您方便的登录到 SSH 服务器,而无需输入密码。SSH 密钥对总是成双出现的,一把公钥,一把私钥。公钥可以自由的放在您所需要连接的 SSH 服务器上,而私钥必须的保管好。

通常sshkey会默认生成在用户家目录下,所以查看家目录下是否存在.ssh 文件夹,以及是否存在相关目录就行。(~/.ssh/id_rsa)

1、什么是公钥登录

公钥登录,很多时候也说public key认证,公钥登录的原理:首先用户将自己的公钥存储在需要登录的远程机器上面,然后登录的时候,远程主机会向用户发送一段随机字符串,接着用户使用自己的私钥加密字符串,并发给远程主机。最后,远程主机使用存储的公钥进行解密,若解密成功,则说明用户可信,准许登录,不在提示输入密码。
SSH 公钥私钥 (https://mushiming.com/) 技术博客 第1张
备注:

1、服务端会将客户端发的公钥写入到~/.ssh/authorized_keys 文件末尾。

2、公钥和私钥在客户端(登录端)生成

2.什么是口令登录

口令登录,即登录的时候需要输入登录密码。

1.客户端向服务器发出请求

2.服务器将自己的公钥返回给客户端;

3.客户端用服务器的公钥加密登录信息, 再将信息发送给服务器;

4.服务器接收到客户端传送的登录信息, 用自己的私钥解码, 如果结果正确, 则同意登录, 建立起连接。

备注:

1、公钥和私钥在服务端生成

二、生成公钥和私钥

ssh-keygen命令,可以生成公钥和私钥,默认生成到用户的家目录下的.ssh文件夹里面    ssh-keygen -t rsa

私钥默认会被保存在 ~/.ssh/id_rsa

公钥默认会被保存在 ~/.ssh/id_rsa.pub

命令的格式如下:


ssh-keygen -f fileName -t rsa -C "dequan@example.com"
  • 1
  • 2

参数解析:

-f 指定要生成文件的文件名称

-t 设置认定方式,值为rsa,即非对称加密;或dsa,即数字签名和认证

-c 指定公钥中的备注信息

三、使用公钥登录的案例

使用ssh key的目的是使得两台机器之间建立互信,从其中一台登陆到另一台时不需要密码。具体方式如下:

1、先在主机A上创建密钥对

ssh-keygen -t rsa

这时可以在主机A上看到生成的秘钥~/.ssh/id_rsa 和公钥 ~/.ssh/ id_rsa.pub

2、把主机A的公钥放在主机B上

scp -r /root/.ssh/id_rsa.pub 192.168.31.147:/root/.ssh/authorized_keys

这里解释下scp命令:

不同的Linux之间copy文件常用有3种方法:

第一种就是ftp,也就是其中一台Linux安装ftp Server,这样可以另外一台使用ftp的client程序来进行文件的copy。

第二种方法就是采用samba服务,类似Windows文件copy 的方式来操作,比较简洁方便。

第三种就是利用scp命令来进行文件复制。

scp是有Security的文件copy,基于ssh登录。操作起来比较方便,比如要把当前一个文件copy到远程另外一台主机上,可以如下命令。

scp /home/daisy/full.tar.gz root@172.19.2.75:/home/root

然后会提示你输入另外那台172.19.2.75主机的root用户的登录密码,接着就开始copy了。

3、此时用A登陆B就不需要密码了

ssh B_ip

同理可应用于B 登陆A

 

五、SSH详解

1、SSH 的结构

SSH是由客户端和服务端的软件组成的,有两个不兼容的版本分别是:1.x和2.x。 用SSH 2.x的客户程序是不能连接到SSH 1.x的服务程序上去的。OpenSSH 2.x同时支持SSH 1.x和2.x。

服务端是一个守护进程(daemon),他在后台运行并响应来自客户端的连接请求。服务端一般是sshd进程,提供了对远程连接的处理,一般包括公共密钥认证、密钥交换、对称密钥加密和非安全连接。

客户端包含ssh程序以及像scp(远程拷贝)、slogin(远程登陆)、sftp(安全文件传输)等其他的应用程序。

他们的工作机制大致是本地的客户端发送一个连接请求到远程的服务端,服务端检查申请的包和IP地址再发送密钥给SSH的客户端,本地再将密钥发回给服务端,自此连接建立。SSH 1.x和SSH 2.x在连接协议上有一些差异。

一旦建立一个安全传输层连接,客户机就发送一个服务请求。当用户认证完成之后,会发送第二个服务请求。这样就允许新定义的协议可以与上述协议共存。连接协议提供了用途广泛的各种通道,有标准的方法用于建立安全交互式会话外壳和转发(“隧道技术”)专有 TCP/IP 端口和 X11 连接。

SSH被设计成为工作于自己的基础之上而不利用超级服务器(inetd),虽然可以通过inetd上的tcpd来运行SSH进程,但是这完全没有必要。启动SSH服务器后,sshd运行起来并在默认的22端口进行监听(你可以用 # ps -waux | grep sshd 来查看sshd是否已经被正确的运行了)如果不是通过inetd启动的SSH,那么SSH就将一直等待连接请求。当请求到来的时候SSH守护进程会产生一个子进程,该子进程进行这次的连接处理。

2、SSH 的启动与停止

首先确保ssh服务已经安装

检查服务是否已经启动 
ps -e | grep sshd

启动、停止、重启服务 
service sshd start     开启ssh服务 
service sshd stop      停止ssh服务 
service sshd restart    重启ssh服务 
或者使用带有路径的脚本: 
/etc/init.d/sshd start 
/etc/init.d/sshd stop 
/etc/init.d/restart

配置ssh-server,配置文件位于/etc/ssh/sshd_config,默认端口为22,为了安全,一般自定义为其他端口,然后重启

THE END

发表回复