首页 > 其他分享 >SSH原理

SSH原理

时间:2022-08-26 21:23:07浏览次数:98  
标签:sshd 公钥 配置文件 密钥 keygen SSH 原理 ssh

参考:https://github.com/wangdoc/ssh-tutorial
ssh是一个加密协议,通常用于远程登陆服务器为了避免明文传输导致的不安全。ssh分为服务端和客户端,被登录的服务器安装ssh服务端,要登陆的用户是ssh客户端。

SSH服务端

ssh服务端称为sshd,Ubuntu安装:sudo apt-get install openssh-server

sshd配置文件

sshd 的配置文件在/etc/ssh目录,主配置文件是sshd_config,此外还有一些安装时生成的密钥。

  • /etc/ssh/sshd_config:配置文件

注意,如果重装 sshd,上面这些密钥都会重新生成,导致客户端重新连接 ssh 服务器时,会跳出警告,拒绝连接。为了避免这种情况,可以在重装 sshd 时,先备份/etc/ssh目录,重装后再恢复这个目录。或者客户端运行:ssh-keygen -R hostname删除原来的公钥指纹,再次连接。

配置文件sshd_config的格式是,每个命令占据一行。每行都是配置项和对应的值,配置项的大小写不敏感,与值之间使用空格分隔。

Port 2034

上面的配置命令指定,配置项Port的值是2034Port写成port也可。

配置文件还有另一种格式,就是配置项与值之间有一个等号,等号前后的空格可选。

Port = 2034

配置文件里面,#开头的行表示注释。

# 这是一行注释

注意,注释只能放在一行的开头,不能放在一行的结尾。

Port 2034 # 此处不允许注释

上面的写法是错误的。

另外,空行等同于注释。

sshd 启动时会自动读取默认的配置文件。如果希望使用其他的配置文件,可以用 sshd 命令的-f参数指定。

$ sshd -f /usr/local/ssh/my_config

上面的命令指定 sshd 使用另一个配置文件my_config

修改配置文件以后,可以用 sshd 命令的-t(test)检查有没有语法错误。

$ sshd -t

配置文件修改以后,并不会自动生效,必须重新启动 sshd。

$ sudo systemctl restart sshd.service

SSH客户端

Ubuntu安装:sudo apt-get install openssh-client

基本用法

ssh username@hostname

如果是第一次连接,需要保存服务器公钥指纹(服务器公钥经过hash之后的值),以后每次连接需要验证这个指纹。所有的公钥指纹存在~/.ssh/known_hosts文件中。

SSH命令行配置

-c

-c参数指定加密算法。

$ ssh -c blowfish,3des server.example.com
# 或者
$ ssh -c blowfish -c 3des server.example.com

上面命令指定使用加密算法blowfish3des

-i

-i参数用于指定私钥,意为“identity_file”,默认值为~/.ssh/id_dsa(DSA 算法)和~/.ssh/id_rsa(RSA 算法)。注意,对应的公钥必须存放到服务器,详见《密钥登录》一章。

$ ssh -i my-key server.example.com

-p

-p参数指定 SSH 客户端连接的服务器端口。

$ ssh -p 2035 server.example.com

上面命令连接服务器的2035端口。

SSH密钥登陆

一种客户端免除输入密码的登陆方式。

密钥登陆过程

  1. 客户通过ssh-keygen生成自己的公钥密钥。
  2. 手动将客户的公钥放在服务器的指定位置
  3. 客户端向服务器发送SSH登录请求
  4. 服务端收到后明文发送一段随机数据给客户
  5. 客户收到之后用自己的私钥加密这段数据(签名)发送给服务器
  6. 服务器用客户端提供给自己的公钥解密,如果与原始数据一致,则允许登录。

ssh-keygen:生命密钥

通常使用参数t指定密钥的加密算法:ssh-keygen -t dsa

生成密钥以后,建议修改它们的权限,防止其他人读取。

$ chmod 600 ~/.ssh/id_rsa
$ chmod 600 ~/.ssh/id_rsa.pub

配置项

ssh-keygen的命令行配置项,主要有下面这些。

(1)-b

-b参数指定密钥的二进制位数。这个参数值越大,密钥就越不容易破解,但是加密解密的计算开销也会加大。

一般来说,-b至少应该是1024,更安全一些可以设为2048或者更高。

(2)-C

-C参数可以为密钥文件指定新的注释,格式为username@host

下面命令生成一个4096位 RSA 加密算法的密钥对,并且给出了用户名和主机名。

$ ssh-keygen -t rsa -b 4096 -C "[email protected]"

(3)-f

-f参数指定生成的私钥文件。

$ ssh-keygen -t dsa -f mykey

上面命令会在当前目录生成私钥文件mykey和公钥文件mykey.pub

(4)-F

-F参数检查某个主机名是否在known_hosts文件里面。

$ ssh-keygen -F example.com

(5)-N

-N参数用于指定私钥的密码(passphrase)。

$ ssh-keygen -t dsa -N secretword

(6)-p

-p参数用于重新指定私钥的密码(passphrase)。它与-N的不同之处在于,新密码不在命令中指定,而是执行后再输入。ssh 先要求输入旧密码,然后要求输入两遍新密码。

(7)-R

-R参数将指定的主机公钥指纹移出known_hosts文件。

$ ssh-keygen -R example.com

(8)-t

-t参数用于指定生成密钥的加密算法,一般为dsarsa

上传公钥

客户端的公钥一般放在服务器的~/.ssh/authorized_keys,每个公钥占一行。权限是644。

标签:sshd,公钥,配置文件,密钥,keygen,SSH,原理,ssh
From: https://www.cnblogs.com/hellozhangjz/p/16629300.html

相关文章

  • VS Code实现SSH远程开发
    最近收获一台新台式机,但是个人主要还是使用自己的笔记本,用了几天远程控制,感觉各种不方便,最终决定配置一下VSCode实现SSH远程开发,特此记录。首先介绍一下环境,控制端是Wind......
  • 一台设备配置不同git仓库网站的ssh
    第一步生成sshkey#为github生成ssh-key-f后面是指定生成文件名字ssh-keygen-trsa-C"github绑定的邮箱"-f~/.ssh/id_rsa_github#id_rsa_github.pub是gith......
  • 已整理-sshpass 脚本应用案例
     sshpass一个简单、轻量级命令行工具,提供非交互式密码验证原理:1、ssh直接使用TTY访问,以确保密码是用户键盘输入的。sshpass在专门的tty中运行ssh,以误导ssh相......
  • 编译原理中的词法和语法分析怎么理解?
    看了一些编译原理的博文,对词法和语法的理解:  词法:是对一堆代码的一种提取,语法:是理解提取后的代码分别代表了什么意思,并赋予对应的意义,从而构建AST抽象语法树。......
  • 路由器工作原理、路由表的形成、静态路由、缺省路由、单臂路由
    一、路由、路由器 路由:跨越从源主机到目标主机的一个互联网络来转发数据包的过程。在这个过程中负责转发或者负责路由的机器就叫做路由器。路由器:能够将数据包转发到正......
  • 面试官:HashSet 的实现原理是怎样的?底层是什么数据结构?被问到了。。
    来源:https://www.cnblogs.com/LiaHon/p/11257805.html一.HashSet概述HashSet是Java集合Set的一个实现类,Set是一个接口,其实现类除HashSet之外,还有TreeSet,并继承了Collect......
  • redis的底层原理
    1.String:C语言字符串的缺陷:在c语言中,对字符串操作时,char*指针只是指向字符数组的起始位置,而字符数组的结尾位置就用\0表示,意思是指字符串的结束1.获取长度需......
  • Linux使用密钥登录SSH
    输入命令和上传密钥时需要注意当前目录、账号和读写权限生成密钥使用服务器生成(方法一,推荐)1.1生成密钥#ssh-keygen(这里pwd为当前账号的home目录)1.2下载密钥.id_......
  • SpringBoot - 文件上传原理
    文件上传原理来个例子客户端<formrole="form"th:action="@{/upload}"method="post"enctype="multipart/form-data"><divclass="form-group"><label......
  • 建立与GitHub的ssh连接
    1.生成ssh密钥ssh-keygen-trsa-C"邮箱"选择保存位置,生成打开生成的id_rsa.pub文件,复制里边的全部内容,格式如下ssh-rsaAAAAB3NzaC1yc2EAy9/ZcYqwd7KN0Dy2/sTpod......