1、遠程連接服務器
遠程連接服務器對于管理員來說,是一個很有用的操作。它使得對服務器的管理更為方便。不過方便歸方便,但開放的讓全世界都可以嘗試連接你的主機并不是什么好事,因為可能會有安全性問題。
1.1、什么是遠程連接服務器
遠程連接服務器通過文字或圖形接口的方式來遠程登錄系統,讓你在遠程的終端前面登錄Linux主機已取得可操作主機的接口(Shell),而登陸后的操作感覺上就像坐在系統前面一樣!
用 SSH/Telnet/VNC 等方式取得的文字或者圖形 Shell 能夠進行很多系統管理的任務,與單純的 FTP 能進行的工作當然不同。
遠程連接服務器的功能:
1、分享 Unix-Like 主機的運算能力;
2、服務器類型(Server),有限度的開放連接;
3、工作站類型(Workstation),只對內網開放;
1.2、有哪些可供登錄的類型
文字接口和圖形接口,明文傳輸和加密傳輸
文字接口明文傳輸:Telnet、RSH,目前已少用;
文字接口加密:SSH為主;
圖形接口:XDMCP、VNC、XRDP等
2、SSH服務器
SSH(Secure Shell Protocol),它可以通過數據包加密技術將等待傳輸的數據包加密后在傳輸到網絡上,因此數據信息就比較安全。
在默認狀態下,SSH協議本身提供兩個服務器功能。
一個是類似 Telnet 的遠程連接使用 Shell 的服務器,即俗稱的SSH;
另一個就是類似 FTP 服務的 Sftp-Server,提供更安全的 FTP 服務
2.1、連接加密技術
目前常見的數據包加密技術通常是所謂的 ?“非對稱密鑰系統” 來處理的。主要是通過兩把不一樣的公鑰(Public)和私鑰(Private)來進行加密與解密的過程。由于這兩把鑰匙的作用是提供數據加解密的,所以在同一個方向的連接中,這把鑰匙當然是需要成對的。
公鑰(Public Key):提供給遠程主機進行數據加密行為,也就是說大家都能取得你的公鑰來將數據加密;
私鑰(Private Key):遠程主機使用你的公鑰加密的數據,在本地端就只能使用來進行解密。由于私鑰很重要,因此私鑰是不能夠外流的,只能保護在自己的主機上。
由于每臺主機都應該有自己的密鑰(公鑰與私鑰),且公鑰用來加密而私鑰用來解密,其中私鑰不可外流,但因為網絡是雙向的,所以,每個人應該都要有對方的“公鑰”才對!
1、服務器建立公鑰文件;公鑰私鑰的產生2、客戶端主動連接要求;
3、服務器傳送公鑰給客戶端;
4、客戶端記錄/對比服務器的公鑰數據及計算自己的公私鑰;(客戶端的密鑰是隨機運算產生于本次連接當中的,所以這次的連接與下次的連接密鑰可能會不一樣啦!此外客戶端的用戶主目錄下:~/.ssh/know_hosts 中會記錄曾經連接過的主機的 Public Key,用于確認·我們自己已經連接上正確的服務器。如果想要產生新的密鑰則 rm ?/etc/ssh/ssh_host*
5、返回客戶端的公鑰數據到服務器;
6、服務器接受私鑰開始雙向加解密。
2.2、啟動SSH服務
SSHD可以同時提供Shell和FTP,而且都是架構在 Port 22 上面的
2.3、SSH客戶端連接程序 —— Linux用戶
2.3.1、SSH:直接登錄遠程主機的指令
如果不填寫賬號的話,那么會以本地端計算機的賬號來嘗試登陸遠程。
ssh ?192.168.1.1
ssh ?hahaha@192.168.1.1
ssh ?-f ?hahaha@192.168.1.1 ?shutdown -h ?now
2.3.2、服務器公鑰記錄文件:~/.ssh/known_hosts
當你登錄遠程服務器時,本機會主動接收到服務器的Public Key去比對 ~/.ssh/known_hosts有無相關公鑰。
2.3.3、模擬FTP的文件傳輸方式:SFTP
SSH是登錄遠程服務器進行工作,那如果你只是想要從遠程服務器下載或者上傳文件呢?那就不使用SSH啦,而必須使用SFTP或SCP。這兩個指令都是使用SSH的通道(port :22),只是模擬成FTP與復制的操作而已。
sftp ?student@192.168.1.1
2.3.4、文件異地直接復制:SCP
通常使用SFTP是因為可能不知道服務器上面已存在的文件名信息,如果已經知道服務器上的文件名,那么最簡單快捷的方式是使用SCP這個命令。
scp ?/home/aaa/test.txt ?zhang@192.168.1.1:/home/zhang
scp ?zhang@192.168.1.1:/home/zhang/AAA.txt ?/home/aaa/
3、SSHD服務器詳細配置
基本上,所有的SSHD服務器的詳細配置都放置在 /etc/ssh/sshd_config 配置文件中。同時請注意,配置文件里只要未被修改的值即為默認值,你可以依據它來修改。建議取消root登錄并將SSH版本設定為2.
vim ?/etc/ssh/sshd_config
將遠程連接禁止root登錄:
#PermitRootLogin ?yes ? ?改為 ? ?PermitRootLogin ? ?no;
#Protocol 2
SSH限制被嘗試次數:
MaxAuthTries ?6;
在限定的次數里面密碼認證失敗的話將會被強制斷開連接。
關閉UseDNS加速SSH登錄:
經常登錄SSH的朋友可以感覺出,每次登錄SSH時總是要停頓一下才能連接上,這是因為OpenSSH服務器有一個DNS查找選項UseDNS在默認情況下是打開的;
UseDNS選項打開的狀態下,當客戶端試圖登錄SSH服務器時,服務器端先根據客戶端的IP地址進行DNS PTR反向查詢客戶端主機名,然后根據查詢出的客戶端主機名進行DNS正向A記錄查詢,驗證與其原始IP地址是否一致,這是防止客戶端欺騙的一種措施,但一般我們的IP不會有PTR記錄,打開這個選項不過是在白白浪費時間而已,不如將其關閉。
UseDNS no;
SSH限制IP登錄幾種方法:
1、修改 etc/hosts.allow 和 etc/hosts.deny 文件;
2、修改 /etc/ssh/sshd_config 文件,加入 Allowusers:用戶名@IP(只允許某用戶從哪個Ip登錄)。
?Allowusers *@192.168.1.111?
PermissionRootLogin no
#這兩者可以保證只能從你允許的IP登錄你的服務器;
4、制作不用密碼可立即登錄的SSH用戶
利用Key不輸入密碼遠程連接主機,具體流程
1、客戶端建立兩把鑰匙:利用命令為 ssh-keygen;
2、客戶端放置好私鑰文件:將 Private Key 放在用戶主目錄內的 .ssh/ 里面即可,“.ssh”文件夾權限為700,私鑰權限為600且屬于用戶自己,否則在未來密鑰對比的過程中將出現問題。
3、將公鑰放置到服務器端中:將 Public Key 放置在你想要用來登錄的那個用戶的主目錄內的 .ssh/authorized_keys文件里,也可以用追加的方式寫入。
ssh-keygen ?[ -t ?rsa | dsa ],之后會生成公鑰和私鑰;
將公鑰上傳到需要遠程連接的服務器上:
scp ?~/.ssh/id_rsa.pub ?zhang@192.168.203.129:~;
cat ?id_rsa.pub ?>> .ssh/authorized_keys;將公鑰寫入
.ssh 目錄的權限是700,authorized_keys權限是644
步驟關鍵:
Client必須制作出Public和Private這兩把Key,且Private Key需要放到 ~/.ssh/ 內;
Server必須要有Public Key,且放置到用戶主目錄下的 ~/.ssh/authorized_keys,同時目錄的權限(.ssh)必須是700而文件權限必須是644,同時文件的屬主和屬組都必須與該賬號吻合才行。
當你還想要登錄其他遠程主機時,只要將你的Public Key(id_rsa.pub)文件copy到其他主機上去,并且將內容添加到 ~/.ssh/authorized_keys中即可。
5、簡易安全設置
SSHD 所謂的安全其實指的是SSHD的數據是加密過的,所以它的數據在Internet上面傳遞時是比較安全的。至于SSHD這個服務本身就不是那樣安全了。所以如果要將SSHD對Internet開放可登錄的權限的話,那么,就盡量局限在幾個小范圍內的IP或主機名(如你們公司的出口IP),這很重要。
1、服務器軟件本身的設置強化:/etc/ssh/sshd_config,禁止root登錄,禁止某個用戶登錄,禁止某個用戶組登錄;
2、/etc/hosts.allow 和 /etc/hosts.deny
hosts.allow--->sshd :127.0.0.1 192.168.0.0/255.255.0.0
hosts.deny--->sshd:ALL
3、iptables數據包過濾防火墻
6、SSH服務器的高級應用
6.1、在非標準端口啟動SSH(默認端口:22)
vi ?/etc/ssh/sshd_config
# Port 22(這是默認信息)----> Port 23(修改為23端口,但一定要注意,不要將端口開在某些周知的端口上,如80那些)
或者兩端口共存,即sshd監聽這兩個端口:
Port ?22
Port ?23
非標準端口連接:
ssh ?-p ?23 ?zhang@192.168.209.129
6.2、以 rsync 進行同步鏡像備份
rsync 是一個相當棒的異地備份系統的指令,可以達到類似鏡像(mirror)的功能
rsync 第一次備份的時候需要花費比較長的時間,因為首次要備份所有的文件。但是再次備份文件的時候,僅會復制有差異的數據。這個很重要的哈!
因為 rsync ?是通過 SSH 來傳輸數據的,所以你可以針對 某個用戶制作出免密碼登錄的SSH密鑰!如此一來,往后異地備份系統就能夠自動地以 crontab 來進行備份了。
rsync ?的三種傳輸方式:
1、在本機上直接運行,用法幾乎與 cp 一模一樣,例如:
rsync ?-av ?/etc ?/tmp ?將/etc/ 的數據備份到 /tmp/etc 內
2、通過 rsh 或 ssh 的信道在Server / Client 之間進行傳輸數據,例如:
rsync -avz user@ip:/test /test #先做無秘鑰就可直接使用了
#rsync ?-av ?-e ?ssh ?user@ip:/etc ?/tmp ?將遠程Server的/etc 數據備份到本地 /tmp/etc
3、直接通過 rsync ?提供的服務(daemon)來傳輸,此時 rsync ?主機需要啟動 873 Port
你必須要在Server端啟動 rsync,看 /etc/xinetd.d/rsync;
你必須編輯 /etc/rsyncd.conf 配置文件;
你必須設置定義Client端連接的密碼數據;
在 Client端可以利用: rsync ?-av ?user@hostname::/dir/path ?/local/path ?注意是兩個冒號
6.3、通過SSH通道加密原本無加密的服務
重點回顧:
遠程連接服務器可以讓用戶在任何一臺計算機登錄主機,以便使用主機的資源來管理與維護主機;
Telnet與RSH都是以明文方式傳輸數據,當數據在Internet上面傳輸時較不安全;
SSH由于使用密鑰系統,因此數據在Internet上傳輸時時加密過的,所以比較安全;
但SSH還是屬于比較危險的服務,請不要對整個Internet開放SSH的可登錄權限,可利用iptables 規范可登錄的范圍;
SSH的Public Key 放在服務器端,而Private Key 放在Client端;
使用SSH時,盡量使用類似E-mail的方式來登錄,即:ssh ?username@hostname;
Client端可以比對Server傳來的Public Key的一致性,利用的文件為 ~user/.ssh/known_hosts;
SSH的Client端軟件提供SSH、SCP、SFTP等程序;
制作不需要密碼的SSH賬號時,可利用ssh-keygen ?-t ?rsa 來生成Public Key和Private Key;
上述指令所生成的Public Key必須要上傳到Server的 ~user/.ssh/authorized_keys;
rsync ?可通過SSH 的服通道或 rsync ?--daemon 的方式來連接傳輸,其主要功能可以通過類似鏡像備份來僅備份新的數據,因此傳輸數據相當快。