彼岸船夫

我是一只菜鸟,在繁华城市独自飞翔,为生活有时候很迷茫,苦苦坚持在无烟沙场,期待渡船远方

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 如果配置了主机互信直接可以登录远程主机下载所有文件

SSH原理及应用

posted on 2017-04-28 01:05  彼岸船夫  阅读(268)  评论(0编辑  收藏  举报

导航