Linux下的ssh實驗環境搭建與管理
實驗環境
服務端:xuegod-63 IP:192.168.1.63
用戶端:xuegod-64 IP:192.168.1.64
用戶端普通使用者:ceshi 密碼:123456
安裝好掃描軟體rpm -ivh /mnt/Packages/nmap-5.21-4.el6.x86_64.rpm
實驗目标
1:SSHD服務介紹
2:SSHD服務安裝配置
3:兩Linux伺服器之間資料拷貝
4:SSHD服務作用:
實驗步驟
1:搭建環境
1):網橋模式
2):vmtools安裝完畢
3):yum源配置完畢
4):nmap安裝完畢
5):添加使用者完畢
2:實驗腳本
第一塊:sshd簡述與登入應用
SSHD服務簡述
SSH 協定:安全外殼協定。為 Secure Shell 的縮寫。SSH 為建立在應用層和傳輸層基礎上的安全協定。
sshd服務使用SSH協定可以用來進行遠端控制, 或在計算機之間傳送檔案。
而實作此功能的傳統方式,如telnet(終端仿真協定)都是極為不安全的,并且會使用明文傳送密碼。
OpenSSH軟體包,提供了服務端背景程式和用戶端工具,用來加密遠端控件和檔案傳輸過程中的資料,并由此來代替原來的類似服務。
Ssh的标準端口
[root@xuegod-63 ~]# vim /etc/services
檢視一下ssh的包
[root@xuegod-63 Packages]# ls openssh*
openssh-5.3p1-70.el6.x86_64.rpm #核心檔案包
openssh-askpass-5.3p1-70.el6.x86_64.rpm #xshell用的包
openssh-clients-5.3p1-70.el6.x86_64.rpm #用戶端的包
openssh-server-5.3p1-70.el6.x86_64.rpm #服務端的包
#這四個包是預設安裝好的
檢視一下包是否安裝好
[root@xuegod-63 Packages]# rpm -qa | grep openssh
openssh-clients-5.3p1-70.el6.x86_64
openssh-server-5.3p1-70.el6.x86_64
openssh-5.3p1-70.el6.x86_64
openssh-askpass-5.3p1-70.el6.x86_64
#可以清楚的看到這四個包是預設安裝好的,是以不需要我們去安裝的,隻需要我們去啟動一下就OK了
檢視包的安裝路徑 - - - 這裡是舉例檢視服務端的包
[root@xuegod-63 Packages]# rpm -pql openssh-server-5.3p1-70.el6.x86_64.rpm
/etc/rc.d/init.d/sshd #ssh服務端的啟動路徑
/etc/ssh/sshd_config #ssh服務端的配置檔案路徑
注:
OpenSSH 常用配置檔案有兩個/etc/ssh/ssh_config 和/etc/ssh/sshd_config。
ssh_config 為用戶端配置檔案
sshd_config 為伺服器端配置檔案
檢視ssh的運作狀态與關閉ssh服務運作
1:檢視狀态的2中方法
[root@xuegod-63 ~]# service sshd status
[root@xuegod-63 ~]# /etc/init.d/sshd status
#sshd的四個包預設情況下是安裝好的,但是預設情況是關閉運作的
2:關閉ssh服務運作的兩種方法
[root@xuegod-63 ~]# service sshd stop
[root@xuegod-63 ~]# /etc/init.d/sshd stop
啟動服務的3種方法
[root@xuegod-63 Packages]# /etc/init.d/sshd start
[root@xuegod-63 Packages]# /etc/init.d/sshd restart
[root@xuegod-63 Packages]# service sshd restart
Ssh服務開機加載并檢視啟動級别
[root@xuegod-63 ~]# chkconfig sshd on
[root@xuegod-63 ~]# chkconfig --list sshd
sshd 0:關閉1:關閉2:啟用3:啟用4:啟用5:啟用6:關閉
第二塊:修改配置檔案,實戰舉例:
1:SSH運程登入:身份驗證
1):Ssh指令參數
[root@xuegod-63 ~]# ssh
-f :需要配合後面的指令,可以不登陸遠端主機就直接發送指令過去
-p:如果sshd服務啟動在非标準端口,需要使用此參數
2):Ssh使用文法
Ssh+遠端登入的使用者名+@+遠端登入的ip位址
3):以标準端口22,用root程序登入遠端主機
#由于ssh後面沒有加使用者名,是以預設的是使用目前使用者(即1.63上的root使用者)來登陸遠端伺服器的,
在開頭以RSA的哪行後面接的就是遠端伺服器(即1.64,用戶端)的公鑰指紋碼,如果确認沒有問題,那麼你就需要輸入yes來表示确認,将該指紋碼寫入到伺服器公鑰記錄檔案(~/etc/ssh/ssh_hosts_*)以便對比伺服器的正确性,
RSA算法基于一個十分簡單的數論事實:将兩個大素數相乘十分容易,但是想要對其乘積進行因式分解卻極其困難,是以可以将乘積公開作為加密密鑰。
現在由于遠端伺服器(即1.64用戶端)的公鑰檔案已經被記錄在本機1.63上了,是以在後面本機1.63在重複登入用戶端的話,就不在需要指紋碼驗證了,
4):測試- - -加入使用者名遠端登入的兩種方法
<a href="https://s1.51cto.com/wyfs02/M02/8F/69/wKioL1jdxviQlLwSAAAgw6Lb2sg975.png" target="_blank"></a>
<a href="https://s1.51cto.com/wyfs02/M02/8F/6C/wKiom1jdxvnQ1Vk6AAAsdSn_qnA788.png" target="_blank"></a>
#由于加入了使用者名,是以該主機1.63遠端登入到用戶端的普通使用者“ceshi”下,并且,因為該主機1.63登陸過用戶端1.64,是以再次登入的時候并沒有出現用戶端主機公鑰的指紋碼資訊了。
5):以飛标準端口222登入遠端主機
1:設定sshd 監聽端口号
# SSH 預設使用 22 這個port,也可以使用多個port,即重複使用 port 這個設定項目!
# 例如想要開放 sshd 端口為 22和 222 ,則多加一行内容為: Port 222 即可
# 然後重新啟動 sshd 這樣就好了。 建議大家修改 port number 為其它端口。防止别人暴力破解。
2:檢視端口
[root@xuegod-63 ~]# netstat -anutp | grep ssh
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 15477/sshd
tcp 0 0 :::22 :::* LISTEN 15477/
#這裡可以看到監聽的端口是22
3:修改sshd服務預設監聽的端口為22和222
[root@xuegod-63 ~]# vim /etc/ssh/sshd_config
4:重新開機服務
[root@xuegod-63 ~]# /etc/init.d/sshd restart
停止 sshd: [确定]
正在啟動 sshd: [确定]
5:再次檢視端口
tcp 0 0 0.0.0.0:222 0.0.0.0:* LISTEN 16530/sshd
tcp 0 0 :::222 :::* LISTEN 16530/sshd
#這裡可以看到監聽的是222端口
6:測試
#可以看到,我們是沒有登入進去的,告訴我們端口22,連接配接失敗。
#加“-p”以非端口的形式遠端登入。
2:伺服器公鑰記錄檔案
在該主機1.63登入用戶端1.64時,本機會主動利用用戶端發過來的公鑰資訊去對比自己的~/etc/ssh/ssh_hosts_*下中有無用戶端的公鑰,然後進行下面的操作
1):若該主機1.63 中~/etc/ssh/ssh_hosts_*下沒有記錄用戶端的公鑰資訊,則會詢問該主機1.63是否需要記錄遠端用戶端的公鑰資訊,即範例中回答 “yes”的哪一步。若要記錄,則回答yes,表示記錄,就會将用戶端1.64的公鑰資訊記錄在該主機1.63的~/etc/ssh/ssh_hosts_下,且執行後續工作,如果不記錄的話,則回答no即可,或者直接“ctrl+c”終端回話,并且登出工作。
2):若該主機1.63 中~/etc/ssh/ssh_hosts_*下有記錄用戶端的公鑰資訊,則會将用戶端1.64發過來的公鑰資訊與自己的~/etc/ssh/ssh_hosts_下記錄的公鑰資訊進行對比,如果相同,則繼續進行登入工作,如果不相同的話,則會出現警告資訊,并離開登入工作。這是用戶端的自我保護功能,以避免你的伺服器是被别人僞裝的。
思考
伺服器ssh會經常變更,如果測試用的主機會經常重新安裝,那麼也就是說,測試主機記錄的伺服器的公鑰資訊肯定會不同,那就無法登陸了,這該怎麼辦呢?
解答:
由于遠端伺服器用戶端的公鑰資訊是記錄在服務端1.63的~/etc/ssh/ssh_hosts下面的,那麼我們隻需要将原有的公鑰資訊給删除掉,在重新啟動服務,再重新連接配接遠端伺服器并重新記錄新的公鑰資訊不就OK了嗎?
步驟
[root@xuegod-63 ~]# rm /etc/ssh/ssh_hosts*
第三塊:虛拟機,添加一塊網卡。讓sshd伺服器隻在192.168.3.63 網絡接口上監聽
關機Linux機器,添加一塊網卡。
[root@xuegod-63 ~]# setup #生成配置eth1配置檔案。
儲存退出。
重新開機網絡服務
[root@xuegod-63 ~]# /etc/init.d/network restart
修改配置檔案
[root@localhost network-scripts]# vim /etc/ssh/sshd_config
修改預設在哪個IP位址上監聽:
改:
#ListenAddress 0.0.0.0
為:
ListenAddress 192.168.3.63
重新開機sshd服務
Servcie sshd resatrt
測試
#這個時候我們可以看到到,連結1.63是遠端連接配接不上去的,而遠端連接配接3.63是能夠連接配接上去的,那麼也就說明了限制一個ip位址登入是成功的
分享:
《黑客帝國:重裝上陣》中的崔尼迪入侵電站的方法之SSH CRC-32漏洞
《【科技趣聞】《黑客帝國:重裝上陣》中的崔尼迪入侵電站的方法》中,我們介紹了崔尼迪利用ssh的CRC-32漏洞将電站系統的Root密碼更改,成功入侵了電站系統。現在來介紹一下這個SSH CRC-32漏洞。這個漏洞由于其年代久遠,早已經失效。
較長的描述
SSH是一個遠端通路加密協定,其中在CRC32補償攻擊探測代碼中存在一個整數溢出可以允許遠端攻擊者寫值到記憶體中的任意位置。
# HostKey /etc/ssh/ssh_host_rsa_key # SSH version 2 使用的 RSA 私鑰
# HostKey /etc/ssh/ssh_host_dsa_key # SSH version 2 使用的 DSA 私鑰
# 還記得我們在主機的 SSH 聯機流程裡面談到的,這裡就是 Host Key 。
RSA 是一種非對稱加解密算法。
RSA 與 DSA 都是非對稱加密算法。其中RSA的安全性是基于極其困難的大整數的分解(兩個素數的乘積);
DSA 的安全性是基于整數有限域離散對數難題。基本上可以認為相同密鑰長度的 RSA 算法與 DSA 算法安全性相當。
公鑰用于加密,它是向所有人公開的;私鑰用于解密,隻有密文的接收者持有。
SyslogFacility AUTHPRIV
# 當有人使用 SSH 登入系統的時候,SSH 會記錄資訊,這個資訊要記錄的類型為AUTHPRIV。
預設日志存放在哪?
sshd服務日志存放在: /var/log/secure 。
例: 為什麼sshd配置檔案中沒有指定日志,但日志卻存放在了: /var/log/secure ?
[root@xuegod-63 ssh]# vim /etc/rsyslog.conf 檢視:
AUTHPRIV
安全設定項
# PermitRootLogin yes
#是否允許 root 登入!預設是允許的,但是建議改為no!
PasswordAuthentication yes
# 密碼驗證當然是需要的!是以這裡寫 yes
# PermitEmptyPasswords no
# 若上面那一項如果設定為 yes 的話,這一項就最好設定為 no ,
# 這個項目在是否允許以空的密碼登入!當然不許!
例: 使xshell可以讓root密碼為空的帳号登入。
LoginiGraceTme 2m
# 當使用者連上 SSH server 之後,會出現輸入密碼的畫面,在該畫面中,
# 在多久時間内沒有成功連上 SSH server 就強迫斷線!若無機關則預設時間為秒!
例:
改:LoginGraceTime 2m
為:LoginGraceTime 5 ,重新開機後
Connection to 192.168.1.63 closed.
[root@xuegod64 ~]# ssh 192.168.1.63
[email protected]'s password:
Connection closed by 192.168.1.63
第四塊:通過密匙進行sshd服務認證
目标:實作服務端與用戶端互相登入不需要密碼,且可以互相拷貝檔案
分析:在用戶端上先生成一個密鑰對,一個是公鑰,一個是私鑰,将公鑰發給服務端。在發送的時候,用戶端是需要輸入服務端的密碼的。
sshd服務端:xuegod-63
sshd用戶端:xuegod-64
1):用戶端生成密匙對: xuegod-64
使用root帳号登入後執行ssh-keygen 生成密匙。
[root@xuegod64 ~]# ssh-keygen #一直按Enter鍵
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
2):檢視生成的配置檔案
[root@xuegod64 ~]# ls /root/.ssh/
id_rsa id_rsa.pub known_hosts
#id_rsa.pub 公鑰資訊
#id_rsa 秘鑰資訊
[root@xuegod64 ~]# cat /root/.ssh/id_rsa.pub #檢視公鑰資訊
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEApTk+7QFrysm+oSVwiBF9C4GI8wDkH1IBdymA2U8po1fjAMc+mlNqQudZsXBwv6qXLE6URbaGfa8c+C6jJAFCY9Z9iRDpQh4IsQrgAryrZNZQdSk7PngTAYmXNA6B1FYfxKveZ7LREcXAo1FeYGSTYnrY8WEzdBzGa1YJbbpgkYW4a5wxijM7Z9yuD81Pzl4jLYea6UfCfeCe6iqSPJU2Gp2wuH2/4dTz9oKZkZrbP2MF+HNxemaiOTWofHc8+mdwUfTZGPwEGFim5GrxuB7aMvXMyzEyamsxst4JnlPjA7SZaqLyXs8j3FfV3wMEl0KfyW4ysee32RAoXTo1h7pgnQ== root@xuegod64
3):用戶端釋出公匙給服務端
使用ssh-copy-id 指令将用戶端生成的公鑰釋出到遠端伺服器192.168.1.63 xuegod63.cn,并使用-i 參數指定本地公鑰的存放位置。發送過去的預設位址就是存放秘鑰位址,即:/root/.ssh/ 下面。
[root@xuegod-64 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.1.63
[email protected]'s password: 123456
Now try logging into the machine, with "ssh '192.168.1.63'", and check in:
[root@xuegod63 ~]# cat /root/.ssh/authorized_keys #服務端檢視用戶端發來的公鑰資訊。
4):測試連接配接遠端伺服器
[root@xuegod-64 ~]# ssh 192.168.1.63
Last login: Wed Aug 5 14:00:29 2015
[root@xuegod-63 ~]#
#可以看到1.64用戶端遠端登入1.63服務端是不需要密碼的!
[root@xuegod-63 ~]# ssh 192.168.1.64
[email protected]'s password:
Last login: Sun Aug 23 13:27:52 2015 from 192.168.1.63
[root@xuegod-65 ~]#
#可以看到服務端1.63遠端登入用戶端1.64是需要密碼的
注:這個時候就相當于用戶端有自己的鎖和服務端的鑰匙,能夠開啟服務端,而服務端隻有自己的鎖,但是沒有用戶端的鑰匙,是以無法遠端登入連接配接用戶端的
這個時候隻能是用戶端不需要密碼連結上服務端,而服務端是不能夠不需要密碼連結上用戶端的 ,那麼想要讓兩端互相都不需要密碼就可以遠端登入的話,方法有兩種,一種是也在服務端生成密鑰對,發送公鑰給用戶端。另一種就是用戶端在即發送公鑰給自己。方法如下。
5):1.64給自己釋出秘鑰
[root@xuegod-64 ~]# ssh-copy-id 192.168.1.64
[email protected]'s password: 123456
Now try logging into the machine, with "ssh '192.168.1.64'", and check in:
#這個時候是1.64給自己生産一個秘鑰
6):再給1.63發一個秘鑰過去
[root@xuegod-64 ~]# scp /root/.ssh/id_rsa 192.168.1.63:/root/.ssh/id_rsa
id_rsa 100% 1675 1.6KB/s 00:00
#1.64将自己生成的秘鑰發給1.63服務端,這樣服務端就相當于有了用戶端的鑰匙
7):測試
Last login: Sun Aug 23 12:56:47 2015 from 192.168.1.64
Last login: Sun Aug 23 12:54:03 2015 from 192.168.1.63
[root@xuegod-64 ~]#
#這個時候,服務端和用戶端就可以互相登入且不需要任何密碼了
第五塊:遠端拷貝
1)要把目前一個檔案copy到遠端另外一台主機上
1:将服務端1.63上拷貝passwd到用戶端1.64的tmp目錄下
[root@xuegod-63 ~]# scp /etc/passwd [email protected]:/tmp
passwd 100% 1856 1.8KB/s 00:00
#我們可以看到,由于上個實驗中,服務端與用戶端實作了不需要密碼就可以遠端登入,再次拷貝中也是不需要任何密碼的
2:檢視1.64用戶端
@xuegod-64 ~]# ls /tmp/passwd
/tmp/passwd
#可以看到在1.64;用戶端上有了剛才在服務端拷貝過來的passwd檔案
2)把檔案從遠端主機copy到目前系統一台主機上
1:在服務端上将用戶端的psswd拷貝到服務端的/opt目錄下
[root@xuegod-63 ~]# scp [email protected]:/etc/passwd /opt
passwd 100% 1895 1.9KB/s 00:00
2:檢視1.63服務端
@xuegod-63 ~]# ls /opt/
/opt/passwd
第六塊:SSH遠端啟動服務
1)遠端檢視1.64用戶端的阿帕奇伺服器的運作狀态
[root@xuegod-63 ~]# ssh 192.168.1.64 /etc/init.d/httpd status
httpd 已停
#這裡我們可以看到,1.64用戶端的阿帕奇伺服器的運作狀态是關閉的
2)遠端開啟1.64用戶端阿帕奇伺服器
[root@xuegod-63 ~]# ssh 192.168.1.64 /etc/init.d/httpd restart
停止 httpd:[失敗]
正在啟動 httpd:httpd: apr_sockaddr_info_get() failed for xuegod-64
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
[确定]
#這個時候我們看到1.64用戶端的阿帕奇伺服器是被我們遠端開啟了
3)再次遠端檢視1.64用戶端的阿帕奇伺服器的運作狀态
httpd (pid 10474) 正在運作...
#可以看到1.64的阿帕奇伺服器的運作狀态是開啟的
本文轉自 于學康 51CTO部落格,原文連結:http://blog.51cto.com/blxueyuan/1912027,如需轉載請自行聯系原作者