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