Lanttcat / Vimer

blog by Issues
0 stars 0 forks source link

SSH和OpenSSH面面观 #13

Open Lanttcat opened 5 years ago

Lanttcat commented 5 years ago

部署CI持续集成,执行ssh的时候,遇到了一些问题,本着记录一点的精神,全面的了解一下ssh吧。

大体历史

Version1.x

1995年,芬兰赫尔辛基科技大学的研究员TatuYlönen设计了第一个版本的协议(现称为SSH-1),这个版本是在他的大学时通过密码嗅探攻击提出的。SSH的目标是取代早期的rlogin,TELNET,ftp和rsh协议,这些协议不提供强认证,也不保证机密性。

Version2.x

“Secsh”是负责SSH协议版本2的IETF工作组的官方Internet工程任务组(IETF)名称。2006年,该协议的修订版本SSH-2被采纳为标准。此版本与SSH-1不兼容。SSH-2具有SSH-1的安全性,并且有其他功能改进。

Version1.99

在2006年1月,在版本2.1建立之后,RFC 4253指定支持2。这不是一个实际版本,而是一种识别向后兼容性的方法。

OpenSSH and OSSH

1999年,想要一个免费软件版本的开发人员回到原始SSH程序的旧版本1.2.12,这是最后一个在开源许可下发布的版本。BjörnGrönvall的OSSH是从这个代码库开发的。此后不久,OpenBSD开发人员分享了Grönvall的代码,并对其进行了大量的工作,创建了OpenSSH,随OpenBSD 2.6版一起发布。从这个版本开始,形成了一个“可移植性”分支,将OpenSSH移植到其他操作系统。 截至2005年,OpenSSH是最受欢迎的单一SSH实现,默认情况下会出现在大量操作系统中。OSSH已经过时。OpenSSH继续得到维护并支持SSH-2协议。 OpenSSH在7.6 release版本彻底删除了对ssh version版本的支持

好吧,我承认,以上转载至,翻译了维基百科的百度百科。

两种级别的安全验证

第一种级别(基于口令的安全验证) 第二种级别(基于密匙的安全验证)

OpenSSH

OpenSSH是使用SSH协议进行远程登录的首选工具。它会加密所有流量,以防止窃听,连接劫持和其他攻击。此外,OpenSSH还提供大量安全隧道功能,多种身份验证方法和复杂的配置选项。 OpenSSH包含以下工具(其实就是一些命令):

  1. 远程操作工具:ssh scp sftp
  2. 密钥管理:ssh-add ssh-keysign ssh-keyscan ssh-keygen
  3. 服务端:sshd sftp-server ssh-agent

其大概的原理(图片来自https://www.ssh.com/):

使用

OpenSSH分为openssh-client和openssh-server Ubuntu的安装说明

从几个常见的场景,看看这几个命令的使用:

GitHub 与 ssh-keygen

这是一个非常常见的场景,这里有个Github官方文档,生成新的SSH key。 这里主要有两个问题:

  1. 命令的参数
  2. 所谓新的SSH key,长什么样子 关于命令参数: 废话不多说,直接官方文档 对比GitHub的命令
    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

ssh-agent

ssh代理程序,使用场景如下:

  1. 登陆不同的ssh服务器需要不同的密钥,那么我们可以使用ssh代理,它会自动帮我们选择对应的密钥进行认证。
  2. 私钥设置了密码,我们需要频繁的输入密码,ssh代理可以免去重复操作。

使用方式:

有两种方式可以启动一个ssh代理:

  1. ssh-agent xterm & 例如:ssh-agent$SHELL & ,它会当前shell中,创建一个子shell,该shell关闭后,代理也会随之关闭。
  2. eval ssh-agent -s,-s可选,指定shell类型,也可以是别的类型,例如-c,这个命令直接启动了一个ssh-agent进程。

ssh-add

adds private key identities to the authentication agent

ssh-keysign

ssh helper program for host-based authentication

ssh-keyscan

gather SSH public keys

sshd

sshd会开启一个后台进程,以监听来自客户端的请求,它可以通过命令行或者配置文件配置。

scp

命令格式:

scp | [-346BCpqrTv] [-c cipher] [-F ssh_config] [-i identity_file] [-J destination] [-l limit] [-o ssh_option] [-P port] [-S program] source ... target

具体命令见文档 注意source ... target,顺序的调整,可以帮我们完成从server到client和才client到server 的转换。 source或者targert的路径格式:

[user@]host[:port][/path]

遇到过的问题:

Permission denied

Lanttcat commented 5 years ago

关于ssh-keygen -t 参数:是选择key的类型,目前OpenSSH给出了四种选择: dsa | ecdsa | ed25519 | rsa

表示算法不懂,简单汇总

rsa:非对称加密算法,基于极其困难的大整数的分解 dsa:非对称加密算法,用于数字签名 ecdsa:ECDSA是ECC与DSA的结合,和椭圆曲线算法有关 ed25519:数字签名算法,签名和验证的性能都极高,看到这里,卒。

Google了好久~

Lanttcat commented 5 years ago

SSH 密钥对总是成双出现的,一把公钥,一把私钥。公钥可以自由的放在您所需要连接的 SSH 服务器上,而私钥必须稳妥的保管好。

所谓"公钥登录",原理很简单,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录 shell,不再要求密码。这样子,我们即可保证了整个登录过程的安全,也不会受到中间人攻击。

Lanttcat commented 5 years ago

中间人攻击

Lanttcat commented 5 years ago

关于ssh端口的问题,已经在Linux上怎么配置与开启 OpenSSH config相关文档

vi /etc/ssh/sshd_config

更改Port 22 然后重启service sshd restart

Lanttcat commented 5 years ago

如何对数据进行加密

当时使用ssh的时候,发生了什么

公钥和私钥