SSH
SSH:Secure Shell,linux远程登录协议
早期都是用telnet,应用层协议,tcp端口23。两大缺陷:认证过程和传输都是明文
SSH工作于tcp端口22,C/S结构,ssh即是协议也是工具
OpenSSH 是ssh协议的开源实现,目前只使用v2版本,v1版本无法避免中间人攻击,已经废弃
客户端软件:
linux:ssh
windows:putty 绿色软件,但国人汉化之后出现附加后门。服务器端避免使用绿色破解版
secureCRT
XManager
服务器端:ssh没有实现在windows的服务端
ssh如何实现加密的数据传输过程?
1、首次发起服务器端请求,服务器端发送公钥给客户端。如何保证对方身份?自行确认此公钥是对方的(连接时选择是否接受)
2、客户端生成随机对称密钥,并用服务器端公钥加密
3、服务器端获得对称密钥即可开始通信
上述为基于口令的认证,问题来了,加密的账号密码在网络上传输的时候仍有可能被破解。所以一般不建议此种方式的管理员登录,应用普通用户登录再su
而基于密钥的认证是指客户端生成一对密钥,公钥放服务器保存,此后只需传输用户名并用私钥加密,服务端能解密即可,不需要传输用户名对应的密码
SSH的安全策略
1、一般为了安全性应当只允许有限的地址登录,使用vpn来固定登录的源地址
2、不要使用默认端口
3、定期更换足够长度的密码
4、限制可登陆用户(配置文件中AllowUsers)
5、禁止root用户直接登陆
客户端ssh和服务端sshd的各自配置文件都在/etc/ssh/ssh_config(sshd_config)
该目录下还有密钥对文件,ssh_host_key(.pub)是sshv1版本使用的
ssh客户端使用
ssh客户端配置文件 :/etc/ssh/ssh_config ,配置文件中定义了哪些主机使用哪些选项
常用方式
ssh IP 连接远程服务端,如果没有指定用户就用客户端用户登录,直接提示输密码
ssh -l 用户名 或者 ssh 用户名@IP
ssh –p 端口
第一次登录后,为什么就没有提示接受服务端公钥?
客户端首次登录后保存服务端公钥在客户端当前用户家目录.ssh/known_host
不进行登录,直接发送命令到远程执行,一次性执行?
ssh user@IP `command`
ssh -X、ssh -Y 执行远程主机的窗口命令(要求本地要在图形终端下执行)把远程窗口显示到本地,-X和-Y功能类似
SCP
scp: 利用ssh协议在主机之间实现安全文件传输的工具
scp SRC1... DEST #源与目标两个参数位置调换实现上传和下载的区分
分两种情形:
1、源文件在本机,目标为远程
# scp /path/to/somefile... USERNAME@HOST:/path/to/somewhere
2、源文件在远程,本地为目标
# scp USERNAME@HOST:/path/to/somewhere /path/to/somewhere
-r: 复制目录时使用
-p: 保持源文件的元数据信息,包括mode和timestamp
-q: 静默模式
-p PORT: 指定ssh协议监听的端口
服务端配置文件sshd_config
AdressFamily 哪一类IP地址上监听(IPv4、IPv6)
ListenAdress 用于多个地址的网卡,指定地址提供ssh服务,为了安全一般限定内网地址。
KeyRegenerationInterval 客户端生成临时对称密钥的使用时长
ServerKeyBits 服务器端密钥长度
LoginGraceTime 建立会话后,最长等待输入账号密码的时间
PermitRootLogin 是否允许管理员ssh登录
MaxAuthTries 允许密码错误的次数
RSAAuthentication 基于密钥时使用RSA方式的认证
PubKeyAuthentication 是否使用基于密钥认证
AuthorizedKeyFile 密钥文件名 ,基于密钥认证的密钥路径
PasswordAuthentication 是否使用口令认证
banner、PrintMotd(/etc/motd文件) 是否显示信息,考虑安全尽量少输出信息。
UseDNS no 客户端连接服务端的时候不做反向解析
查看配置文件帮助man sshd_config
kill -1 1号信号不用重启加载配置文件(同service reload)
如何实现基于密钥的认证?
1、 客户端生成一对密钥
ssh-keygen -t rsa (rsa或dsa)
2、 把公钥传输至服务器端对应需要登陆用户的家目录.ssh/authorized_keys文件
使用scp(基于ssh的远程复制)或者ssh-coyp-id
ssh-copy-id -i .ssh/id_rsa.pub USERNAME@HOST
scp [options] 源 目标 (远程主机使用username:host:/path/file格式)
3、 测试登录
直接[root@host]#ssh ip
ssh-keygen -f 指定保存生成密钥的路径(默认在当前用户家目录.ssh)
-N ‘’指定加密私钥的密码,为空则不输入
注意.ssh权限为600,自定义目录也要保持一致的权限
ssh-coyp-id -i /path/公钥 user@ip 直接复制到远程的.ssh目录
如果使用scp要将客户端公钥内容追加到authorized_keys文件
sftp ip 如果配置了主机互信直接可以登录远程主机下载所有文件