什么是SSH?
简单说,SSH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。
SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。本文针对的实现是OpenSSH,它是自由软件,应用非常广泛。这里只讨论SSH在Linux Shell中的用法。如果要在Windows系统中使用SSH,会用到另一种软件PuTTY,这需要另文介绍。
中间人攻击
SSH之所以能够保证安全,原因在于它采用了公钥加密。
整个过程是这样的:(1)远程主机收到用户的登录请求,把自己的公钥发给用户。(2)用户使用这个公钥,将登录密码加密后,发送回来。(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。
这个过程本身是安全的,但是实施的时候存在一个风险:如果有人截获了登录请求,然后冒充远程主机,将伪造的公钥发给用户,那么用户很难辨别真伪。因为不像https协议,SSH协议的公钥是没有证书中心(CA)公证的,也就是说,都是自己签发的。
可以设想,如果攻击者插在用户与远程主机之间(比如在公共的wifi区域),用伪造的公钥,获取用户的登录密码。再用这个密码登录远程主机,那么SSH的安全机制就荡然无存了。这种风险就是著名的"中间人攻击"(Man-in-the-middle attack)。
ssh的安装
SSH分客户端openssh-client和openssh-server
如果你只是想登陆别的机器的SSH只需要安装openssh-client(ubuntu有默认安装,如果没有则sudoapt-get install openssh-client),如果要使本机开放SSH服务就需要安装openssh-server。
Ubuntu缺省已经安装了ssh client。
公钥传输原理
- 客户端发起链接请求。
- 服务端返回自己的公钥,以及一个会话ID(这一步客户端得到服务端公钥)。
- 客户端生成密钥对。
- 客户端用自己的公钥异或会话ID,计算出一个值Res,并用服务端的公钥加密。
- 客户端发送加密后的值到服务端,服务端用私钥解密,得到Res。
- 服务端用解密后的值Res异或会话ID,计算出客户端的公钥(这一步服务端得到客户端公钥)。
- 最终:双方各自持有三个秘钥,分别为自己的一对公、私钥,以及对方的公钥,之后的所有通讯都会被加密。
两种验证方式
密码验证
对服务器中本地的用户登录名称,密码进行验证,简便,但可能会被暴力破解
密钥对验证
需求提供和匹配的密钥信息才能通过验证,通常现在客户端中创建一堆密钥(公钥 密钥),然后将公钥文件放在
使用SSH客户端程序
SSH优点
远程管理Linux系统基本上都要失业到ssh,原因很简单:telnet、FTP等传输方式是以明文传送用户认证信息,本质上是不安全的,存在被网络窃听的危险。SSH(Secure Shell)目前较可靠,是专为远程等; 会话和其他忘了服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题,通过SSH可以对所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗
- 数据传输是加密的,可以防止信息泄漏
- 数据传输是压缩的,可以提高传输速度
实验
安装SSH
命令:sudo apt-get install openssh-client
安装ssh-client
命令:sudo apt-get install openssh-client
更新安装源
sudo apt-get update
安装服务器
sudo apt-get install openssh-server
查看ssh服务是否启动
sudo apt-get install openssh-server
输出显示有sshd,说明ssh服务已经启动,如果没有启动,输入"sudo service ssh start"-->回车-->ssh服务就会启动。
ssh配置
通过修改配置文件/etc/ssh/sshd_config,可以改ssh登录端口和禁止root登录。打开配置文件并修改:
sudo gedit /etc/ssh/sshd_config
把配置文件中的"PermitRootLogin without-password"加一个"#"号,把它注释掉-->再增加一句"PermitRootLogin yes"-->保存,修改成功。("PermitRootLogin yes"的含义是允许root用户登录)
配置完成后重启ssh服务:
sudo srvice ssh reastart
四 开启ssh服务
在终端敲入以下命令:
sudo srvice ssh star
再执行查看ssh服务状态的命令:
sudo service ssh status
如果出现以下提示:
ssh start/running, process 890
说明你的ssh服务已经启动了。如果失败来的话,那试着卸载一下(看第六步:卸载ssh服务)再安装(第二部:安装ssh服务)。
五 使用ssh服务
在两台主机(UBuntu16.04)都安装了ssh客户端和服务端之后,在作为ssh客户端的主机上执行以下命令,来远程控制作为ssh服务端(zhilan: 192.168.177.105)的主机:
sudo ssh [email protected]