程登錄Linux虛擬機(jī):配置、網(wǎng)絡(luò)模式與防火墻排錯(cuò)實(shí)踐)
簡(jiǎn)介面向VMware等虛擬機(jī)環(huán)境下配置Telnet遠(yuǎn)程登錄Linux的參考文檔適合剛接觸Linux遠(yuǎn)程管理的初學(xué)者及需要快速搭建實(shí)驗(yàn)環(huán)境的運(yùn)維人員。文檔以Red Hat Linux 9及Red Hat EL 5為例覆蓋從檢查telnet與telnet-server包、安裝RPM包、修改xinetd配置到配置host-only、bridge、NAT三種虛擬機(jī)網(wǎng)絡(luò)模式以及調(diào)整防火墻和允許root登錄的完整流程。資源為單個(gè)PDF文件大小34KB共1個(gè)文件內(nèi)容精煉、步驟清晰便于隨時(shí)查閱。目前已有150人學(xué)習(xí)下載可作為L(zhǎng)inux遠(yuǎn)程管理入門時(shí)的手邊參考尤其能幫助解決“連不上、登錄被拒”等常見(jiàn)問(wèn)題。文檔中還對(duì)SSH Secure Shell Client連接虛擬機(jī)做了簡(jiǎn)要介紹并整理了telnet-server安裝與測(cè)試的實(shí)操記錄適合跟著命令行逐步操作快速獲得可復(fù)現(xiàn)的排錯(cuò)思路。1. 用 telnet 遠(yuǎn)程登錄虛擬機(jī)里的 Linux先理清這條鏈路上的四個(gè)環(huán)節(jié)剛裝完 VMware 的讀者十有八九都干過(guò)這件事在 Windows 命令行里敲 telnet 加虛擬機(jī) IP結(jié)果不是No route to host就是Connection closed by foreign host。我拆完這份 PDF 之后的感受是telnet 遠(yuǎn)程登錄虛擬機(jī)下的 Linux 說(shuō)穿了就四個(gè)環(huán)節(jié)——服務(wù)端包裝沒(méi)裝、xinetd 啟沒(méi)啟、網(wǎng)絡(luò)通不通、防火墻放沒(méi)放行 23 端口。這份資料把這四件事從頭到尾記了一遍既講了 host-only、bridge、NAT 三種網(wǎng)絡(luò)模式的配法也寫了 root 登錄被禁時(shí)的處理辦法中間還夾了不少真實(shí)翻車記錄。適合做課程設(shè)計(jì)、實(shí)驗(yàn)環(huán)境以及需要在 Windows 和 Linux 虛擬機(jī)之間互傳文件的場(chǎng)景。先把這條鏈路疏通后面再談更安全的遠(yuǎn)程工具才有意義。2. 安裝 telnet 服務(wù)端分清 client 與 server 兩個(gè)包再激活 xinetd2.1 先分清兩個(gè)包telnet 是客戶端telnet-server 才是服務(wù)端很多人在第一步就搞混了。telnet這個(gè) rpm 包是客戶端程序用來(lái)發(fā)起連接真正對(duì)外監(jiān)聽(tīng) 23 端口的是telnet-server。CentOS、Red Hat 系默認(rèn)通常只裝了客戶端服務(wù)端要單獨(dú)裝所以rpm -qa | grep telnet之后看到telnet-0.17-39.el5這類結(jié)果并不代表服務(wù)已經(jīng)能用了必須確認(rèn)有沒(méi)有telnet-server那一行。先做檢查命令如下# 查詢 telnet 相關(guān)包是否安裝telnet 是客戶端telnet-server 是服務(wù)端 rpm -qa | grep telnet # 如果只看到 telnet-xxx說(shuō)明服務(wù)端沒(méi)裝如果兩條都沒(méi)有說(shuō)明客戶端也沒(méi)裝這一步的輸出決定了后面的動(dòng)作。只看得到telnet-0.17-39.el5就說(shuō)明當(dāng)前機(jī)器只具備發(fā)起連接的能力不具備被連接的能力需要補(bǔ)裝telnet-server。另外需要留意telnet-server 服務(wù)在 RHEL 5、CentOS 5 這類系統(tǒng)里是掛在xinetd超級(jí)守護(hù)進(jìn)程下面的所以安裝順序上要先有 xinetd再裝 telnet-server反過(guò)來(lái)經(jīng)常報(bào)依賴錯(cuò)誤。2.2 三種安裝姿勢(shì)yum 在線裝、光盤 RPM 裝、裝完直接改配置有網(wǎng)絡(luò)的環(huán)境直接走 yum 最省事。CentOS 5.5 實(shí)測(cè)過(guò)下面的命令可以一次拉齊依賴# 先裝 xinetd再裝 telnet-server注意都切到 root 下執(zhí)行 yum install -y xinetd yum install -y telnet-server-y參數(shù)表示安裝過(guò)程中的交互提示全部默認(rèn) yes腳本化操作時(shí)不會(huì)卡在確認(rèn)環(huán)節(jié)。xinetd 是 telnet 的宿主服務(wù)它的職責(zé)是監(jiān)聽(tīng)端口、按請(qǐng)求拉起對(duì)應(yīng)的后臺(tái)程序所以必須先保證它存在。沒(méi)有外網(wǎng)的環(huán)境就用光盤。常見(jiàn)做法是把安裝盤掛載到/mnt/cdr再?gòu)墓獗P里把 rpm 包拷貝出來(lái)裝# 建立掛載點(diǎn)并把光驅(qū)掛上去cdr 目錄可以自己命名 mkdir -p /mnt/cdr mount /dev/cdrom /mnt/cdr # 進(jìn)入光盤目錄按名字找出 telnet 相關(guān)安裝包 cd /mnt/cdr find . -name telnet* # 把找到的 rpm 包拷到根目錄下自建的目錄里方便統(tǒng)一安裝 cp telnet-server-0.17-39.el5.i386.rpm /keith/ cd /keith rpm -ivh telnet-server-0.17-39.el5.i386.rpmrpm -ivh里的 i 是 installv 是顯示詳細(xì)信息h 是打印進(jìn)度條。如果這里報(bào)依賴缺失基本就是沒(méi)先裝 xinetd把 xinetd 的 rpm 也用同樣的方式裝一遍再回頭裝 telnet-server 即可。裝完之后可以用rpm -qa telnet-server驗(yàn)證能回顯版本號(hào)就說(shuō)明安裝成功。2.3 修改 telnet 配置并重啟 xinetdtelnet-server 裝好之后/etc/xinetd.d/telnet這個(gè)配置文件才會(huì)出現(xiàn)。文件里默認(rèn)有一行disable yes意思是服務(wù)處于禁用狀態(tài)需要改成no# 編輯 telnet 的 xinetd 配置 vi /etc/xinetd.d/telnet進(jìn)入 vi 后找到disable yes把 yes 改成 no然后按 ESC 輸入:wq保存退出。如果不想進(jìn)交互界面也可以用 sed 直接替換# 把 disable yes 替換成 disable no-i 表示直接寫回文件 sed -i s/disable.*.*yes/disable no/ /etc/xinetd.d/telnet注意 sed 的匹配規(guī)則是整行替換如果已經(jīng)有一行是disable no重復(fù)執(zhí)行不會(huì)產(chǎn)生副作用這點(diǎn)比手改更穩(wěn)。改完配置后必須重啟 xinetd 才能生效# 重啟 xinetd讓新配置加載 service xinetd restart # 查看 23 端口是否處于監(jiān)聽(tīng)狀態(tài) netstat -tunlp | grep 23netstat 輸出里能看到tcp 0 0 0.0.0.0:23之類的行說(shuō)明服務(wù)已經(jīng)監(jiān)聽(tīng)。接下來(lái)可以在本機(jī)做一次自測(cè)telnet localhost如果出現(xiàn)login:提示符說(shuō)明服務(wù)端配置沒(méi)問(wèn)題可以進(jìn)入網(wǎng)絡(luò)和防火墻的排查環(huán)節(jié)了。3. 三種虛擬機(jī)網(wǎng)絡(luò)模式host-only / bridge / NAT 的連通條件與驗(yàn)證方法3.1 host-only 模式的配置邏輯宿主機(jī)做網(wǎng)關(guān)host-only 模式下虛擬機(jī)只能和宿主機(jī)通信默認(rèn)上不了外網(wǎng)。它的原理是 VMware 在宿主機(jī)上創(chuàng)建了一塊虛擬網(wǎng)卡 vmnet1虛擬機(jī)的流量全部走這塊網(wǎng)卡。要讓虛擬機(jī)訪問(wèn)外部網(wǎng)絡(luò)常見(jiàn)做法是把 vmnet1 在宿主機(jī)側(cè)設(shè)置為共享然后以 vmnet1 的 IP 作為虛擬機(jī)的網(wǎng)關(guān)。具體配置時(shí)先在 Windows 的“網(wǎng)絡(luò)連接”里找到 vmnet1 對(duì)應(yīng)的網(wǎng)卡右鍵屬性切到“高級(jí)”標(biāo)簽勾選 Internet 連接共享共享對(duì)象選 vmnet1。然后改虛擬機(jī)里的 Linux IP# 假設(shè)宿主機(jī) vmnet1 的 IP 是 192.168.0.1 # 把虛擬機(jī) IP 改成 192.168.0.100掩碼 255.255.255.0網(wǎng)關(guān)指向 vmnet1 ifconfig eth0 192.168.0.100 netmask 255.255.255.0 route add default gw 192.168.0.1route add default gw的意思是添加一條默認(rèn)路由所有去往非本網(wǎng)段的流量都會(huì)交給 192.168.0.1 轉(zhuǎn)發(fā)。host-only 最容易犯的錯(cuò)是把虛擬機(jī)和宿主機(jī)配成不同網(wǎng)段兩邊都認(rèn)為自己沒(méi)走錯(cuò)實(shí)際數(shù)據(jù)包根本出不去。配置完先ping 192.168.0.1通了再繼續(xù)。3.2 bridge 模式與 NAT 模式兩者對(duì) IP 的要求完全不同bridge 模式是把虛擬機(jī)模擬成局域網(wǎng)里的一臺(tái)獨(dú)立主機(jī)虛擬機(jī)的 IP、掩碼、網(wǎng)關(guān)、DNS 都要和宿主機(jī)處于同一個(gè)網(wǎng)段。比如宿主機(jī) IP 是 192.168.1.18那虛擬機(jī)可以配成 192.168.1.252網(wǎng)關(guān)指向 192.168.1.1DNS 按局域網(wǎng)實(shí)際配置填。這種模式最接近真實(shí)網(wǎng)絡(luò)環(huán)境虛擬機(jī)和其他機(jī)器互訪都不受限制。修改 IP 的常規(guī)做法是編輯網(wǎng)卡配置文件# RHEL 6 及之前的版本網(wǎng)卡配置文件是 ifcfg-eth0CentOS 7 后叫 ifcfg-ens33 vi /etc/sysconfig/network-scripts/ifcfg-eth0文件里需要保證這幾行的值正確BOOTPROTOstatic表示靜態(tài) IPIPADDR填規(guī)劃好的虛擬機(jī) IPNETMASK填 255.255.255.0GATEWAY填局域網(wǎng)網(wǎng)關(guān)ONBOOTyes保證開機(jī)自動(dòng)激活網(wǎng)卡。改完執(zhí)行service network restart生效。bridge 模式下常見(jiàn)的 ping 不通現(xiàn)象十有八九是 IP 和網(wǎng)關(guān)不在同一網(wǎng)段或者網(wǎng)關(guān)寫錯(cuò)。NAT 模式則相反虛擬機(jī)是 VMware 虛擬出來(lái)的私網(wǎng)地址通常不用手動(dòng)配 IPDHCP 會(huì)自動(dòng)分配。這種模式下虛擬機(jī)訪問(wèn)宿主機(jī)通常沒(méi)問(wèn)題但宿主機(jī)想直接 ping 虛擬機(jī)私網(wǎng)地址反而經(jīng)常不通因?yàn)榱髁孔叩氖?vmnet8 而不是普通網(wǎng)卡路徑很多人第一次在 NAT 模式下被這個(gè)現(xiàn)象坑到實(shí)際上不需要糾結(jié)直接測(cè)虛擬機(jī)到宿主機(jī)的連通性即可。3.3 網(wǎng)絡(luò)連通性驗(yàn)證從本機(jī)到網(wǎng)關(guān)再到對(duì)端不管是哪種模式網(wǎng)絡(luò)是否打通只能靠實(shí)測(cè)。我在實(shí)際排查時(shí)固定用一套順序不會(huì)一上來(lái)就 ping 對(duì)端# 第一步確認(rèn)虛擬機(jī)網(wǎng)卡是否激活并拿到了 IP ifconfig eth0 # 第二步查看路由表確認(rèn)默認(rèn)網(wǎng)關(guān)存在 route -n # 第三步先 ping 網(wǎng)關(guān) ping -c 4 192.168.1.1 # 第四步再?gòu)乃拗鳈C(jī) ping 虛擬機(jī) IP ping 192.168.1.252ping -c 4表示只發(fā) 4 個(gè) ICMP 包就結(jié)束避免 CtrlC 中斷的麻煩。第三步能通說(shuō)明虛擬機(jī)出得去第四步能通說(shuō)明宿主機(jī)進(jìn)得來(lái)。兩者都通telnet 連接在網(wǎng)絡(luò)上就沒(méi)有障礙了。如果第三步通而第四步不通問(wèn)題在宿主機(jī)側(cè)優(yōu)先查主機(jī)防火墻是否攔了 ICMP如果第三步就不通問(wèn)題在虛擬機(jī)側(cè)回過(guò)去查網(wǎng)關(guān)和網(wǎng)卡配置。4. iptables 放行 23 端口與 root 登錄限制兩道最隱蔽的坎4.1 防火墻放行 23 端口從臨時(shí) stop 到持久規(guī)則網(wǎng)絡(luò)通了之后telnet 連接大概率會(huì)卡在防火墻這一關(guān)。CentOS 5、RHEL 5 時(shí)代默認(rèn)的防火墻策略比較嚴(yán)格只放行了 SSH22 端口23 端口默認(rèn)拒絕。最直接的驗(yàn)證辦法是暫時(shí)關(guān)閉防火墻再試一次# 臨時(shí)關(guān)閉防火墻重啟后失效適合快速定位問(wèn)題 service iptables stop如果關(guān)掉防火墻后 telnet 能通說(shuō)明問(wèn)題確定在 iptables 規(guī)則上這時(shí)候再?zèng)Q定是開放端口還是關(guān)防火墻。實(shí)驗(yàn)室環(huán)境臨時(shí)用可以service iptables stop但重啟后規(guī)則會(huì)回來(lái)需要配合chkconfig iptables off才能永久關(guān)閉。不過(guò)我不建議一上來(lái)就關(guān)防火墻正確的處理方式是放行 23 端口# -I INPUT 表示把規(guī)則插到 INPUT 鏈最前面-p 指定協(xié)議--dport 指定目標(biāo)端口 iptables -I INPUT -p tcp --dport 23 -j ACCEPT iptables -I INPUT -p udp --dport 23 -j ACCEPT # 保存規(guī)則重啟 iptables 后仍然有效 service iptables save service iptables restart-j ACCEPT表示匹配到的包直接放行。telnet 服務(wù)用的是 TCP 協(xié)議其實(shí)只放行 TCP 就夠了加 UDP 那條是為了避免某些系統(tǒng)里 telnet 相關(guān)探測(cè)誤傷。手改/etc/sysconfig/iptables文件也能達(dá)到同樣效果但規(guī)則鏈的順序、鏈名在不同系統(tǒng)版本里略有差異文件里插錯(cuò)位置會(huì)導(dǎo)致規(guī)則不生效我在這上面栽過(guò)跟頭所以更推薦先用命令行插入規(guī)則再用service iptables save落盤。4.2 root 登錄被拒pam_securetty.so 才是真兇telnet 默認(rèn)禁止 root 用戶直接登錄這是初學(xué)者最容易誤判的一步。明明賬號(hào)密碼都正確連接卻被斷開錯(cuò)誤信息又不夠直白。原因是 PAM 認(rèn)證模塊里的pam_securetty.so會(huì)檢查 root 登錄的終端是否被允許而 telnet 對(duì)應(yīng)的偽終端不在默認(rèn)安全列表里。解決辦法有兩個(gè)。第一個(gè)是注釋掉/etc/pam.d/login里的對(duì)應(yīng)行# 編輯 PAM 配置文件找到下面這行并在前面加 # 注釋 vi /etc/pam.d/login # auth required pam_securetty.so第二個(gè)更粗暴直接把/etc/securetty文件改名讓 PAM 檢查落空# 備份 securetty 文件使 root 登錄不受終端限制 mv /etc/securetty /etc/securetty.bak兩種方法都能讓 root 遠(yuǎn)程登錄進(jìn)去但我要多說(shuō)一句telnet 本身是明文傳輸root 權(quán)限一旦被截獲風(fēng)險(xiǎn)極大建議不要為了一時(shí)方便改掉這個(gè)限制。穩(wěn)妥的做法是用普通用戶登錄再執(zhí)行su -切換到 root密碼即使被截獲也只是普通用戶權(quán)限風(fēng)險(xiǎn)等級(jí)完全不同。以下表格整理了涉及的文件和各自作用文件作用處理方式/etc/pam.d/login登錄認(rèn)證規(guī)則注釋 pam_securetty.so 行/etc/securetty定義 root 可登錄的終端列表改名備份謹(jǐn)慎操作/etc/xinetd.d/telnettelnet 服務(wù)開關(guān)disable 改為 no/etc/sysconfig/iptables防火墻持久規(guī)則加入 23 端口放行4.3 /etc/hosts 與 hosts.allow、hosts.deny訪問(wèn)控制的最后一層防火墻和 PAM 都過(guò)了telnet 連接還有可能被/etc/hosts和 TCP Wrapper 攔下來(lái)。/etc/hosts文件里如果沒(méi)有客戶機(jī)的 IP 映射telnet 連接建立后反向解析主機(jī)名就可能失敗表現(xiàn)出來(lái)就是連上了又被立刻斷開錯(cuò)誤信息里帶著Temporary failure in name resolution。處理方法是在/etc/hosts里追加客戶機(jī) IP 和主機(jī)名的映射# 把客戶機(jī)的 IP 和主機(jī)名寫進(jìn) hosts 文件注意不要?jiǎng)h掉原有的 localhost 行 echo 192.168.1.88 client1 /etc/hosts另外/etc/hosts.allow和/etc/hosts.deny這兩個(gè)文件由 TCP Wrapper 機(jī)制控制如果 deny 文件里有類似ALL: ALL的規(guī)則所有 telnet 連接都會(huì)被拒。檢查的方式很簡(jiǎn)單# 查看 deny 文件里有沒(méi)有非注釋規(guī)則grep -v ^# 用來(lái)過(guò)濾掉注釋行 grep -v ^# /etc/hosts.deny如果輸出為空白說(shuō)明沒(méi)有默認(rèn)拒絕規(guī)則如果有內(nèi)容逐條確認(rèn)是否覆蓋了客戶機(jī) IP。這三個(gè)文件屬于“配置沒(méi)問(wèn)題時(shí)感覺(jué)不到、出了問(wèn)題又很難想到”的類型每次排查 telnet 我都會(huì)順手看一遍不是玄學(xué)是真踩過(guò)。5. telnet 排錯(cuò)避坑五個(gè)真實(shí)故障記錄與處理思路5.1 故障一No route to host連接被直接拒絕執(zhí)行telnet 192.168.1.87后提示No route to host。按字面理解是路由不可達(dá)但實(shí)際上最常見(jiàn)的原因是宿主機(jī)防火墻丟棄了發(fā)往 23 端口的包或者虛擬機(jī) IP 與宿主機(jī)不在同一網(wǎng)段。處理順序是先確認(rèn)兩端 IP 是否同網(wǎng)段再檢查防火墻規(guī)則。同網(wǎng)段的情況下直接service iptables stop臨時(shí)關(guān)閉防火墻測(cè)試能通就說(shuō)明是防火墻攔的回到第 4 章用 iptables 放行 23 端口。這條經(jīng)驗(yàn)幫我省了很多次來(lái)回折騰。5.2 故障二Temporary failure in name resolution連上又被斷開telnet 已經(jīng)顯示Connected to緊接著報(bào)getnameinfo: localhost: Success和Temporary failure in name resolution: Illegal seek然后連接被關(guān)閉。這種表現(xiàn)很容易讓人誤以為是認(rèn)證問(wèn)題實(shí)際是/etc/hosts文件缺少客戶機(jī) IP 映射導(dǎo)致服務(wù)端做反向域名解析時(shí)失敗。在/etc/hosts中補(bǔ)上客戶機(jī)的 IP 和主機(jī)名即可比如192.168.1.88 client1。這個(gè)坑的隱蔽之處在于它只影響有連接建立動(dòng)作的協(xié)議ping 完全正常讓人根本想不到是 DNS 解析的問(wèn)題。從那以后我配任何遠(yuǎn)程服務(wù)都會(huì)先確認(rèn) hosts 文件。5.3 故障三Windows 端 Telnet 拒絕訪問(wèn)提示不是 TelnetClients 組成員這個(gè)故障不在 Linux 側(cè)而是 Windows 的 Telnet 服務(wù)有自己的用戶組限制。Windows 開啟 Telnet 服務(wù)后默認(rèn)只允許 TelnetClients 組的成員登錄管理員在服務(wù)器上也需要先加入該組否則提示“指定用戶不是 TelnetClients 組成員”。另外 Windows 的 Telnet 服務(wù)不允許空密碼沒(méi)有設(shè)置密碼的用戶會(huì)被直接拒絕。解決方式是在 Windows 的“計(jì)算機(jī)管理 - 本地用戶和組”里把目標(biāo)用戶加入 TelnetClients 組并確保設(shè)置了非空密碼。這個(gè)案例提醒我telnet 排錯(cuò)不要只盯著 Linux 側(cè)兩端服務(wù)的用戶策略都可能成為瓶頸。5.4 故障四手改 iptables 配置文件不生效修改/etc/sysconfig/iptables文件、在末尾加上放行 23 端口的規(guī)則后重啟 iptablestelnet 仍然不通。反復(fù)試了幾次都失敗最后發(fā)現(xiàn)是規(guī)則鏈名與系統(tǒng)版本不匹配舊版本默認(rèn)鏈叫RH-Firewall-1-INPUT新版本是INPUT手寫規(guī)則時(shí)用錯(cuò)了鏈名規(guī)則被靜默丟棄。解決方式是優(yōu)先使用命令行工具而非直接編輯文件。iptables -I INPUT -p tcp --dport 23 -j ACCEPT這條命令由內(nèi)核解析不會(huì)出現(xiàn)鏈名不匹配的問(wèn)題然后再用service iptables save把規(guī)則寫入配置文件。如果確實(shí)需要手動(dòng)編輯文件務(wù)必先用iptables -L -n查看當(dāng)前實(shí)際使用的鏈名。5.5 故障五虛擬機(jī)網(wǎng)絡(luò)時(shí)好時(shí)壞宿主機(jī)上的虛擬網(wǎng)卡軟件干擾路由宿主機(jī)上安裝了第三方虛擬網(wǎng)卡類軟件后Linux 虛擬機(jī)出現(xiàn)無(wú)法上網(wǎng)、ping 不通外部地址的現(xiàn)象但虛擬機(jī)與宿主機(jī)之間的通信又正常。根因是第三方軟件在宿主機(jī)上創(chuàng)建了新的虛擬網(wǎng)絡(luò)適配器搶占了默認(rèn)路由導(dǎo)致虛擬機(jī)的流量沒(méi)有走 VMware 的網(wǎng)卡通道。處理方式是在 Windows 的“網(wǎng)絡(luò)連接”中找到對(duì)應(yīng)的虛擬網(wǎng)卡適配器并禁用禁掉之后立即恢復(fù)。這類問(wèn)題在虛擬機(jī)網(wǎng)絡(luò)排查中很容易被忽略因?yàn)?VMware 自身的網(wǎng)卡配置完全正確問(wèn)題偏偏出在宿主機(jī)側(cè)的第三方設(shè)備上。我在處理這類故障時(shí)養(yǎng)成了一個(gè)習(xí)慣先看宿主機(jī)當(dāng)前活躍的網(wǎng)絡(luò)適配器列表再?zèng)Q定要不要深入排查虛擬機(jī)內(nèi)部配置。6. telnet 通了之后用 SSH 接管遠(yuǎn)程操作與文件傳輸telnet 鏈路打通只是第一步實(shí)際使用中我通常只在驗(yàn)證網(wǎng)絡(luò)和應(yīng)急場(chǎng)景下用 telnet日常遠(yuǎn)程操作優(yōu)先切到 SSH。telnet 的數(shù)據(jù)包全部明文傳輸包括用戶名和密碼在虛擬機(jī)和宿主機(jī)之間調(diào)試還能接受一旦涉及真實(shí)服務(wù)器就必須換 SSH。在 CentOS 5 這類老系統(tǒng)上啟用 SSH 服務(wù)的步驟很簡(jiǎn)單# 查看 sshd 服務(wù)在哪些運(yùn)行級(jí)別下啟用 chkconfig --list | grep sshd # 如果只在運(yùn)行級(jí)別 3 啟用保持即可確保防火墻放行 22 端口 iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT service iptables save service sshd restart虛擬機(jī)網(wǎng)卡建議設(shè)為橋接模式這樣宿主機(jī)和虛擬機(jī)處于同一網(wǎng)段SSH 連接更直觀。Windows 側(cè)可以使用 SSH Secure Shell Client 這類工具點(diǎn)擊 Quick Connect輸入虛擬機(jī) IP、用戶名端口選擇 22Authentication 選 Password點(diǎn)擊 Connect 后輸入密碼即可。也可以用命令行直接驗(yàn)證# 一行命令登錄遠(yuǎn)程主機(jī)并執(zhí)行兩個(gè)命令注意 IP 換成自己的虛擬機(jī)地址 ssh root192.168.1.252 uptime; last -5這種方式適合寫腳本做巡檢不需要進(jìn)入交互式 shell。文件傳輸則用 scp 解決它基于 SSH 通道比 telnet 時(shí)代傳文件的方式安全得多# 把本地的 tar 包推送到虛擬機(jī)的 /root 目錄下 scp /tmp/backup.tar.gz root192.168.1.252:/root/關(guān)于遠(yuǎn)程登錄的權(quán)限策略我的習(xí)慣是堅(jiān)持不開放 root 直連telnet 和 SSH 都只允許普通用戶登錄需要管理員權(quán)限時(shí)再 su 切換。telnet 階段的 root 限制其實(shí)是在保護(hù)你明文通道加 root 權(quán)限是最危險(xiǎn)的組合。從那以后我每次配完虛擬機(jī)遠(yuǎn)程登錄都強(qiáng)制走一遍端口監(jiān)聽(tīng)檢查、防火墻放行確認(rèn)、hosts 文件校驗(yàn)、root 登錄策略核對(duì)這四步telnet 通了再上 SSH順序不亂問(wèn)題就好定位。希望這份記錄幫你在虛擬機(jī)遠(yuǎn)程登錄這條路上少踩幾個(gè)坑。本文還有配套的精品資源點(diǎn)擊獲取