ssh:安全的远程登录,实现加密通信,代替传统的telnet协议
具体的软件实现
openssh:ssh协议的开源实现
dropbear:另一个ssh协议的开源项目的实现
ssh公钥交换原理
客户端发起连接请求——客户端得到服务端的公钥——客户端生成自己的公钥或会话ID并用服务端公钥加密发送给服务端——服务端用自己的私钥解密计算出客户端的公钥——双方各自持有自己的公钥私钥和对方的公钥
程序:/usr/sbin/sshd
Unit文件:/usr/lib/systemd/system/sshd.service
ssh命令是ssh客户端,允许实现对远程系统经验证地加密安全访问
当用户远程连接ssh服务器时,会复制ssh服务器/etc/ssh/ssh_host*key.pub文件中的公钥到客户机的~/.ssh/know_hosts
ssh客户端配置文件:/etc/ssh/ssh_config
格式:ssh [user@]host[COMMAND]??? ssh [-l user] host [COMMAND]
常用选项
-p 远程服务器监听的端口
-b 指定连接的源IP
-v 调试模式
-C 压缩方式
-X 支持x11转发
-t 强制伪tty分配
-o option
-i <file> 指定私钥文件路径,实现基于key验证,默认使用文件:~/.ssh/*dsa
scp [options] SRC ... DEST/
常用选项
-C 压缩数据流????????????????? -r 递归复制?????????????? -p 包持原文件的属性信息
-q 静默模式??????????????? -P PORT 指明remote host的监听的端口
实现高效率的远程系统之间复制文件,使用安全的shell连接作为传输方式,比scp更快,基于增量数据同步,即只复制两方不同的文件
常用选项:
-n 模拟复制过程??????????? -v 显示详细过程???????? -r 递归复制目录树?????????? -p 保留权限
-t? 保留修改时间戳??????? -g? 保留组信息??????????? -o 保留所有者信息?????????
-l 将软链接文件本身进行复制????? -L? 将软链接文件执行的文件复制
--progress 显示进度???? --bwlimit? 限速以KB为单位
sshpass用于非交互SSH的密码验证,一般用在sh脚本中,无须再次输入密码
格式:sshpass [option] command parameters
常见选项
-p password
-f? filename?? 跟保存密码的文件名,密码是文件内容的第一行
-e? 将环境变量SSHPASS作为密码
客户端发起ssh请求,服务器会把自己的公钥发送给用户——用户会根据服务器发来的公钥对密码进行加密——服务器用自己私钥解密,如果密码正确,则用户登录成功
在客户端生成一对密钥——将客户端的公钥拷贝到服务端——当客户端再次发送一个连接请求——服务端得到客户端的请求后,会到authorized_keys中查找,如果有相应,就会生成一个字符串——服务端使用客户端拷贝过来的公钥进行加密然后发送给客户端——得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端——服务端接收到客户端发来的字符串后,进行比对,如果一致,允许免密码登陆
ssh-keygen -t rsa [-P 'password'] [-f "~/.ssh/id_rsa]
ssh-copy-id [-i [identity_file]] [user@]host
ssh-keygen -p
服务器端:sshd
服务器端的配置文件:/etc/ssh/sshd_config
建议使用非默认端口
禁止使用protocol version 1
限制可登录用户
设定空闲超时时长
利用防火墙设置ssh访问策略
仅监听特定的IP地址
使用基于密钥的认证
禁止使用空密码
禁止root用户直接登陆
限制ssh的访问频度和并发在线数
经常分析日志