对于Linux下ssh命令的研究报告
1. ssh命令的功能
在Linux中,ssh命令是openssh套件中的客户端连接工具。该命令通过SSH协议,在两个互不信任的主机间提供加密的通信连接,实现安全的登陆远程服务器并在其上执行命令
2. ssh命令背后的协议
SSH,全称Secure Shell(安全外壳协议),它是一种基于非对称加密的网络传输协议,属于应用层协议,由芬兰学者Tatu Ylonen在1995年设计,目的是取代Telnet等明文传输的协议。openssh就是SSH协议的一种实现
- SSH协议的组成
SSH主要由三个子协议构成
a.传输层协议:提供服务器认证,数据加密和信息完整性校验等功能
b.用户认证协议:为服务器提供客户端的身份鉴别
c.连接协议:复用加密的信息隧道,更高层的应用可以在独立于SSH基本体 系外的同时,通过连接协议使用SSH的安全机制
- 安全连接的建立过程
SSH安全连接的建立过程可以分为如下三个阶段
a.协议协商阶段:客户端向服务器发送TCP连接请求,之后双方交换SSH协议 的版本信息,来查看是否兼容,若无法兼容,任何一方均可断开连接
b.服务器认证阶段:这一阶段采用明文方式传输。服务器和客户端向对方发 送一个自己支持的公钥算法列表、加密算法列表、消息验证码算法列表、压缩 算法列表等。 确定最终使用的算法,然后使用DH交换算法,利用主机密钥对 等参数,生成会话密钥和会话id。这样,双方的加密通道就得以建立
c.客户端认证阶段:有两种认证方式。1)密码认证。客户端获取用户输入 的密码后使用服务器的公钥进行加密并发送给服务器,服务器使用自己的私钥 进行解密,对比用户密码是否一致。2)公钥认证。服务端用客户端的公钥加 密一个 256 位的随机字符串,客户端接收后使用自己的私钥解密,然后将这 个字符串和会话id合并在一起,对结果MD散列函数并把散列值返回给服务器, 服务器进行相同的MD散列函数处理,若结果一致则通过认证
至此,认证结束,可以开始数据传输
3. ssh命令的使用
- 配置ssh
服务器的ssh配置文件一般在/etc/ssh/sshd_config,通过vim打开后可以看到几个比较重要的配置项
Port是ssh协议的监听端口。两个ListenAddress分别对应监听的IPV4和IPV6接口,0.0.0.0表示监听所有IP地址
LoginGraceTime表示连接后多少时间内无操作即断开连接。PermitRootLogin表示是否允许root用户远程登陆。MaxAuthTries决定最大连接数量,MaxSessions即每个连接可以开启的最大会话数
PasswordAurhentication选项为是否开启密码认证。对应的,PubkeyAuthentication选项可以开启公钥认证
- ssh命令的基本使用
- 远程登陆
ssh user@host #远程登陆
注意第一次登陆远程主机时,ssh会给出该主机的公钥,提示是否信任该主机。用户可以去官网对比公钥来选择是否继续登陆。我的主机设置的密码登陆,因此输入密码即可
ssh -keygen #用户随机生成公钥 ssh-copy-id user@host #把公钥发送给主机
这是另一种登陆方式,即采用公钥认证登陆。它的原理是,用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录,不再要求密码
-
- 在本机和远程主机间传送数据
ssh命令可以通过输入输出重定向,在本机和远程主机间传送数据,下面给出一个例子
这个例子将本机root家目录下的test文件打包,然后输出给远程主机
-
- 绑定端口
通过使用连接协议,未被加密的网络连接也可以改走SSH连接,从而提高安全性
ssh -D 8080 user@host #8080端口的数据传输给远程主机时,都会改走ssh连接