1.实验内容
1、分析给定的Telnet数据包和SSH数据包,进一步熟悉Telnet和SSH的工作流程;
2、在Linux操作系统中搭建Telnet服务器和SSH服务器;在Windows操作系统中利用自带的Telnet客户端和下载安装的SecureCRT分别连接所搭建的服务器,捕获连接数据包;学习利用SecureCRT远程控制Linux操作系统。
2. Telnet数据包分析
首先是建立TCP连接
第一个TCP包
这里说明了TCP的源端口39140也就是宿主机建立连接开出来的端口,目的端口23 ,telnet服务默认端口。
Sequence number同步序号4bytes,但这里显示的是相对值0。
还应该有一个(但是没有显示)Acknowledgment number确认序号4bytes,为0,因为还是第一个握手包。
Header Length头长度32字节,滑动窗口大小8192字节(8MB),校验和。
Options选项12字节,其中包含最大传输单元MTU默认是1460bytes。
3. SSH数据包分析
完成密码输入后,服务端验证成功后发送一个Telnet报文询问是否Do Terminal Type开始执行命令行,主机客户端回应Will Terminal Type,将要执行,然后双方发送Suboption End消息,之后服务端放送欢迎消息,如图:
和之前输入用户名的传输方法基本一样.两个Telnet一个TCP同步.
完成输入后回车,服务端执行命令并作出回应:
可知login: lx
Password: !@#$%^
上面的是典型的关闭TCP连接的过程.
总结:
Telnet服务是建立在TCP基础之上的,保证数据的准确性。建立连接后,每键入一个字符就要发送和应答,产生至少2个数据包,开销很大。传统的Telnet由于密码明文传输的问题,帐号和密码等敏感资料容易会被窃听,因此很多服务器都会封锁Telnet服务,改用更安全的SSH。
首先是建立TCP连接
第一个TCP包
这里说明了TCP的源端口39140也就是宿主机建立连接开出来的端口,目的端口23 ,telnet服务默认端口。
Sequence number同步序号4bytes,但这里显示的是相对值0。
还应该有一个(但是没有显示)Acknowledgment number确认序号4bytes,为0,因为还是第一个握手包。
Header Length头长度32字节,滑动窗口大小8192字节(8MB),校验和。
Options选项12字节,其中包含最大传输单元MTU默认是1460bytes。
3. SSH数据包分析
完成密码输入后,服务端验证成功后发送一个Telnet报文询问是否Do Terminal Type开始执行命令行,主机客户端回应Will Terminal Type,将要执行,然后双方发送Suboption End消息,之后服务端放送欢迎消息,如图:
和之前输入用户名的传输方法基本一样.两个Telnet一个TCP同步.
完成输入后回车,服务端执行命令并作出回应:
可知login: lx
Password: !@#$%^
上面的是典型的关闭TCP连接的过程.
总结:
Telnet服务是建立在TCP基础之上的,保证数据的准确性。建立连接后,每键入一个字符就要发送和应答,产生至少2个数据包,开销很大。传统的Telnet由于密码明文传输的问题,帐号和密码等敏感资料容易会被窃听,因此很多服务器都会封锁Telnet服务,改用更安全的SSH。
3. SSH数据包分析
4. Telnet服务器搭建
1.ubuntu telnet 服务器端的安装配置
1.安装openbsd-inetd
sudo apt-get install openbsd-inetd
2.安装telnetd
sudo apt-get install telnetd
3.重启openbsd-inetd
sudo /etc/init.d/openbsd-inetd restart
4.查看telnet运行状态
sudo netstat -a | grep telnet
5.登录
telnet IP address (需要现在Telnet服务器上看ip address)
2.开启windows端Telnet功能
控制面板→程序→启用或关闭Windows功能→选择Telnet客户端
3.Ubuntu开启Telnet服务
1 |
|
编辑/etc/inetd.conf,在文件中添加:
1 |
|
修改/etc/xinetd.conf,在# log_type = SYSLOG daemon info下添加:
1 2 3 4 5 |
|
编辑/etc/xinetd.d/telnet文件,添加:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
重启网络
1 |
|
4.测试Windows通过Telnet远程登录Ubuntu
打开cmd→输入telnet→输入open ubuntu ip→输入用户名密码
5.SSH服务器搭建
SSH服务配置安装
一.第一种方法是基于用户名密码的ssh服务器登录
我在这里使用ubuntu14.04作为登录账户,如下图登录ssh服务器,最终显示的是ssh服务器Ubuntu16.04的桌面
下面介绍在windows 上登录ssh服务器的过程
我在windows putty上保存了ssh.txt,如下图的信息
下面在ssh服务器上看
二.第二种方法是密钥的安全认证
查看生成的公钥和私钥
下面建立authorized_keys认证文件
这里需要把私钥文件 (id_rsa)保存在客户端机器上
SSH服务器很多的配置信息都可以在.conf文件中进行更改
设置 SSH,打开密钥登录功能
编辑 /etc/ssh/sshd_config 文件,进行如下设置:
RSAAuthenticationyes
PubkeyAuthenticationyes
另外,请留意 root 用户能否通过SSH 登录:
PermitRootLoginyes
当你完成全部设置,并以密钥方式登录成功后,再禁用密码登录:
PasswordAuthenticationno
最后,重启 SSH 服务:
[[email protected]]$ service sshd restart
将私钥下载到客户端,然后转换为PuTTY 能使用的格式
使用 WinSCP、SFTP 等工具将私钥文件 id_rsa 下载到客户端机器上。然后打开 PuTTYGen,单击 Actions 中的 Load 按钮,载入你刚才下载到的私钥文件。如果你刚才设置了密钥锁码,这时则需要输入。
载入成功后,PuTTYGen 会显示密钥相关的信息。在 Key comment 中键入对密钥的说明信息,然后单击 Save private key 按钮即可将私钥文件存放为 PuTTY 能使用的格式。
今后,当你使用 PuTTY 登录时,可以在左侧的 Connection -> SSH -> Auth 中的 Privatekey file for authentication: 处选择你的私钥文件,然后即可登录了,过程中只需输入密钥锁码即可。
6.实验中出现的问题和解决方法
在windows端登录ssh服务器时
这是我们可以看看服务器端的.conf文件
就这样问题解决了,就是当你完成全部设置,并以密钥方式登录成功后,再禁用密码登录
在github上下载的PuTTY源码包
接下来一段时间打算继续对PuTTY源码进行分析以提高编程的能力和ssh协议具体的实现过程。
参考文献
1. ubuntu16.10开启telnet办法http://blog.csdn.net/a1964543590/article/details/69485836
2. ubuntu16.04开启telnet服务 http://blog.csdn.net/l370398095/article/details/70598632
3. ubuntu设置 SSH 通过密钥登录 http://blog.csdn.net/permike/article/details/52386868