- 传统的网络服务程序,如rsh、FTP、POP和Telnet其本质上都是不安全的;因为它们在网络上用明文传送数据、用户帐号和用户口令,很容易受到中间人(man-in-the-middle)攻击方式的攻击。就是存在另一个人或者一台机器冒充真正的服务器接收用户传给服务器的数据,然后再冒充用户把数据传给真正的服务器。
- 而SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。通过SSH可以对所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。
- SSH之另一项优点为其传输的数据可以是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、POP、甚至为PPP提供一个安全的“通道”。
1. ssh 协议框架中最主要的部分是三个协议:
- 传输层协议:提供
服务器认证 ,数据机密性,信息完整性等
支持。 - 用户认证协议:为服务器提供客户端的身份鉴别。
- 连接协议:将加密的信息隧道复用成若干个逻辑通道,提供给更高层的应用协议使用。
2. ssh 的安全验证:
a. 基于密码
- 对于客户端来说:知道账号和密码即可登录到远程主机,并且所有传输的数据都会被加密。
但是:可能会有别的服务器冒充真正的服务器!这种方式无法避免被【中间人】攻击
。 - 对于服务器端,主机将自己的功用密钥分发给相关的客户端,客户端在访问主机时则使用该主机的公开密钥来加密数据。主机则使用自己的私有密钥来解密数据,从而实现主机密钥认证,确保数据的保密性。
b. 基于密钥
- 客户端需要为自己创建一对密钥,并将公有密钥放到需要访问的服务器上。客户端软件向服务器服务器发出请求,请求用客户端自己的密钥进行安全验证。
- 服务器端在收到请求以后,先在发送请求客户端的用户根目录下寻找客户端的公用密钥,然后把它和客户端发送过来的公有密钥进行比较,如果两个密钥一致,服务器就用公有密钥加密【质询】(challenge)并把它发送给客户端软件。从而能够避免被【中间人】攻击。
- 在这种方案中,需要存在一个密钥认证中心,所有提供服务的主机都将自己的公开密钥提供给认证中心,而任何作为客户端的主机则只要保存一份认证中心的公开密钥就可以了。这种模式下,客户端必须访问认证中心然后才能访问服务器主机。
3. 使用XShell连接服务器(SSH模式)
a. 在XShell上生成密钥对(客户端创建自己的密钥对)
- 打开Xshell,在菜单栏点击“tools”,在弹出的菜单中选择“User Key Generation Wizard...”(密钥生成向导);
- 弹出“User Key Generation Wizard”对话框,在“Key Type”项选择“RSA”公钥加密算法,“Key Length”选择为“2048”位密钥长度;
- 点击“Next”,等待密钥生成;
- 继续下一步,在“Key Name”中输入Key的文件名称,我这里为“key”;在“Passphrase”处输入一个密码用于加密私钥(密码A,下面会用到),并再次输入密码确认;
- 点击“Next”,密钥生成完毕(Public key Format选择SSH2-OpenSSH格式),这里显示的是公钥,我们可以复制公钥然后再保存,也可以直接保存公钥到文件,如下图。私钥这里不显示,可以在“User Key Mangager...”导出到文件;
- 点击“Save as file...”按钮,将公钥(Public key)保存到磁盘,文件名为“key.pub”,备用。
b. 将密钥上传公钥(Public Key)到服务器(服务器配置客户端公钥,这里的用户为 root)
- 使用到Xshell登录到服务器,进入到“/root/.ssh/”目录,运行rz命令(如果没有rz命令,运行yum install lrzsz安装),将key.pub发送到服务器,然后运行如下命令,将公钥(Public Key)导入到“authorized_keys”文件:
[root@localhost ~]# cd /root/.ssh/
[root@localhost .ssh]# rz
rz waiting to receive.
[root@localhost .ssh]# cat key.pub >> authorized_keys
[root@localhost .ssh]# chmod 600 authorized_keys
[root@localhost .ssh]# ls
authorized_keys key.pub
- 使用命令
ifconfig
查看服务器的 ip 地址,并记录下来留下面使用。
c. 配置Xshell使用密钥认证方式登录到服务器
- 打开Xshell,点击“New”按钮,弹出“New Session Properties”对话框,在“Connection”栏目中,输入刚刚配置好公钥(Public Key)的IP地址和端口;
- 点击左侧的“Authentication”,切换到认证栏目,在“Method”选择“Public Key”认证,用户名输入“root”(公钥是放在root目录下的.ssh文件夹中),在“User Key”中选择我们刚才生成的私钥“key”,“Passphrase”中输入私钥的加密密码(密码A);
- 点击确定,Xshell配置ssh免密码登录配置完成。
4. Linux下使用命令(ssh-keygen)生成密钥对
~$ ssh-keygen -t rsa
5. 阻止基于密码登陆的方式(只允许SSH登陆)
首先要已经设置好了允许 SSH 登录,并已经以SSH方式登录到了系统。
~$ su # 切换到root
~$ vim /etc/ssh/sshd_config
# 此时因为使用 SSH 登陆,下面的应该已经设置:
# RSAAuthentication yes
# PubkeyAuthentication yes
# PermitRootLogin yes
# 默认情况下密码登录是 yes :
# PasswordAuthentication yes
# 要禁用的话改成 no :
# PasswordAuthentication no
# 推出 vim 后重启 SSH 服务
~$ service sshd restart
附录
- 博客园-Blog
- GitHub-Blog
- 关注微信订阅号: