ssh
安全外壳协议(Secure Shell Protocol,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接。SSH最常见的用途是远程登录系统,人们通常利用SSH来传输命令行界面和远程执行命令。 SSH使用传输层TCP协议的22号端口。
SSH客户端<--------------网络---------------->SSH服务端
ssh最为主要的三个协议:
传输层协议(The Transport Layer Protocol):传输层协议提供服务器认证,数据机密性,信息完整性等的支持。
用户认证协议(The User Authentication Protocol):用户认证协议为服务器提供客户端的身份鉴别。
连接协议(The Connection Protocol):连接协议将加密的信息隧道复用成若干个逻辑通道,提供给更高层的应用协议使用。
ssh 原理
首次公钥交换:
-
客户端发起链接请求
-
服务端返回自己的公钥,以及一个会话ID(这一步客户端得到服务端公钥)
-
客户端生成密钥对
-
客户端用自己的公钥异或会话ID,计算出一个值Res,并用服务端的公钥加密
-
客户端发送加密值到服务端,服务端用私钥解密,得到Res
-
服务端用解密后的值Res异或会话ID,计算出客户端的公钥(这一步服务端得到客户端公钥)
-
最终:双方各自持有三个秘钥,分别为自己的一对公、私钥,以及对方的公钥,之后的所有通讯都会被加密
- 此后数据交换会加密
相关指令
ssh 参数 用户@IP地址 //远程登录主机
-p <port>:指定远程SSH服务器的端口号,默认是22
-i <identity_file>:指定用于身份验证的私钥文件
ssh -t 跳板IP地址 ssh 目标IP地址 //通过 中转一台服务器 进行访问 主服务器
ssh IP地址 指令 //连接到时 直接执行 指令
介
ssh配置文件
-
服务名称:sshd
-
服务端主程序:/usr/sbin/sshd
-
服务端配置文件:/etc/ssh/sshd_config
-
客户端配置文件:/etc/ssh/ssh_config
/etc/ssh/sshd_config
AllowUsers 用户名 //允许所有主机访问 指定用户
AllowUsers 用户名@IP地址 用户名 //只允许 指定用户访问 本机的指定用户
17 #Port 22 //指定端口号
37 #LoginGraceTime 2m //登录时限 超时自动断开
38 #PermitRootLogin no //是否允许root用户登录
39 #StrictModes yes //检查 .ssh/文件 权限信息等
40 #MaxAuthTries 2 //密码输入错误限制 默认为三
41 #MaxSessions 10 //指定同时最大连接设备数
/etc/ssh/ssh_config
35 # StrictHostKeyChecking ask //若将 ask 改为 no 首次连接时 系统不进行确认询问
出于安全性问题 一般不设置
SFTP
SFTP(SSH文件传输协议)是一种基于SSH协议的安全文件传输协议,它允许用户通过加密的连接进行文件的上传、下载和管理。SFTP提供了对文件传输的安全保障,可以在不安全的网络环境下进行文件传输。SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接和答复操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。
使用方式
sftp [用户名@]IP地址 //连接
sftp连接后 可以使用指令:
get //下载文件
get -r //下载目录
put //上传文件
put -r //上传目录
quit、exit、bye //退出
ftp与sftp的区别:
1. 安全性:SFTP基于SSH协议,通过加密的连接进行文件传输,所有的数据都是加密的,包括身份验证过程中的用户名和密码。而FTP在传输过程中没有加密,数据以明文形式传输,安全性较差。
2. 端口:SFTP使用SSH的默认端口(通常为22),这与SSH服务器的端口相同。而FTP有两个主要的端口,一个用于控制连接(默认端口为21),另一个用于数据传输(默认端口为20)。
3. 防火墙和NAT:SFTP通过SSH协议进行连接,只需要打开SSH端口(通常为22)即可,不需要额外配置。FTP需要打开控制连接和数据连接的端口,并且在使用被动模式(PASV)时,可能需要配置额外的防火墙和网络地址转换(NAT)规则。
访问控制
TCP Wrappers是一个用于网络访问控制的软件工具,它可以通过配置文件对传入(或传出)的网络连接进行策略限制和访问控制。它工作在TCP/IP协议栈中的应用层,可用于限制特定主机或网络对服务的访问。
主要配置文件
-
白名单:/etc/hosts.allow
配置例子: sshd:192.168.84.100,192.168.84.200 //允许这两个地址使用sshd服务进行访问 -
黑名单:/etc/hosts.deny
配置列子: sshd:ALL //禁止所有地址使用sshd服务进行访问
白名单的优先级高于黑名单,如果一个地址既在白名单也在黑名单中,该地址是可以访问的。因产生冲突不建议。
实际工作中一般通过防火墙的方式来实现同样功能。