在我們日常管理與維護服務器個過程中,我們都需要使用遠程連接工具,今天我們就一同來總結下Linux常用的安全遠程連接工具-OpenSSH。
創(chuàng)新互聯(lián)公司專注骨干網(wǎng)絡服務器租用十年,服務更有保障!服務器租用,棕樹數(shù)據(jù)中心 成都服務器租用,成都服務器托管,骨干網(wǎng)絡帶寬,享受低延遲,高速訪問。靈活、實現(xiàn)低成本的共享或公網(wǎng)數(shù)據(jù)中心高速帶寬的專屬高性能服務器。
【遠程登錄協(xié)議】
1、telnet:是TCP/IP協(xié)議族中的一員,是Internet遠程登陸服務的標準協(xié)議和主要方式。它為用戶提供了在本地計算機上完成遠程主
機工作的能力。默認使用的是TCP的23號端口,采用C/S架構,在用戶登錄的過程中傳輸?shù)男畔⒍际敲魑男畔?,安全無法保障,所以不建議用telnet。
2、ssh:為Secure Shell 的縮寫,由IETF的網(wǎng)絡工作小組所制定;SSH
為建立在應用層和傳輸層基礎上的安全協(xié)議。SSH是目前較可靠,專為遠程登錄會話和其他網(wǎng)絡服務提供安全性的協(xié)議。利用 SSH
協(xié)議可以有效防止遠程管理過程中的信息泄露問題。默認使用的是TCP的22號端口,也是基于C/S架構,SSH有兩個版本v1與v2。
sshv1:基于CRC-32做MAC(消息摘要認證),不安全,強烈建議不使用;
sshv2:基于雙方主機的協(xié)商選擇使用最安全的MAC方式 ,其有如下特點:1、加密機制及MAC機制由雙方協(xié)商選定;2、基于DH實現(xiàn)密鑰交換,基于RSA或DSA實現(xiàn)身份認證;3、客戶端通過檢查服務器端的主機密鑰來判斷是否能夠繼續(xù)通信;
【OpenSSH簡述】
OpenSSH 是一組用于安全地訪問遠程計算機的連接工具。它可以作為rlogin、rsh
rcp以及telnet的直接替代品使用。更進一步,其他任何TCP/IP連接都可以通過SSH安全地進行隧道/轉發(fā)。OpenSSH
對所有的傳輸進行加密,從而有效地阻止了竊聽、連接劫持,以及其他網(wǎng)絡級的攻擊。OpenSSH 由 OpenBSD project 維護。
登錄過程和使用rlogin或telnet建立的會話非常類似。在連接時,SSH
會利用一個密鑰指紋系統(tǒng)來驗證服務器的真實性。只有在第一次連接時,用戶會被要求輸入yes進行確認,之后的連接將會驗證預先保存下來的密鑰指紋。如果保
存的指紋與登錄時接收到的不符, 則將會給出警告。 指紋保存在 ~/.ssh/known_hosts中,對于SSHv2指紋,則是
~/.ssh/known_hosts2。
默認情況下,較新版本的OpenSSH只接受SSHv2連接。如果能用版本2則客戶程序會自動使用,否則它會返回使用版本1的模式。此外,也可以通
過命令行參數(shù)-1或-2來相應地強制使用版本1或2。 保持客戶端的版本1能力是為了考慮較早版本的兼容性,建議盡量使用版本2。
【SSH服務器和客戶端工作流程】
OpenSSH使用C/S架構:
服務端工具(S):sshd
客戶端工具(C):ssh命令、putty、xshell、securecrt、sshshellclient;
【OpenSSH客戶端組件-ssh】
配置文本:/etc/ssh/ssh_config
使用方法:
ssh [username@] host [COMMAND]或 ssh -l username host [COMMAND]
-p PORT:指定遠程服務器端口;
-l username:指定登錄遠程主機的用戶,不指定則使用當前用戶;
username@:等同于 -l username;
如果設置了COMMAND,表示使用username賬戶登錄遠程主機執(zhí)行一次指定的命令并返回結果,不會停留在遠程主機上;
[root@www ~]# ssh 192.168.0.110 #使用root用戶登錄;
The authenticity of host '192.168.0.110 (192.168.0.110)' can't be established.
RSA key fingerprint is 01:2e:43:cc:bc:1d:f1:e5:f0:f4:89:78:74:a9:49:44.
Are you sure you want to continue connecting (yes/no)? yes #第一次連接,需手動進行確認;
Warning: Permanently added '192.168.0.110' (RSA) to the list of known hosts.
root@192.168.0.110's password: #輸入遠程主機root賬戶的密碼;
Last login: Mon May 11 16:44:52 2015 from 192.168.0.104
[root@mailCentOS6 ~]# #登錄成功了,遠程主機名為mailCentOS6;
[root@mailCentOS6 ~]# ls #顯示遠程主機root家目錄下的文件;
2.sh boot.iso install.log sdb.mbr test1
anaconda-ks.cfg crontab install.log.syslog \temp\test
[root@mailCentOS6 ~]# exit #退出登錄;
logout
Connection to 192.168.0.110 closed.
[root@www ~]# ssh root@192.168.0.110 ls #使用root登錄遠程主機,執(zhí)行一次ls命令,返回結果便退出;
root@192.168.0.110's password: #第二次連接,就不需要輸入yes了,直接輸入密碼即可;
2.sh
anaconda-ks.cfg
boot.iso
crontab
install.log
install.log.syslog
sdb.mbr
\temp\test
test1
[root@www ~]# #看到了嗎,我們當前并沒有登錄在遠程主機;
【OpenSSH服務器端組件-sshd】
配置文件:/etc/ssh/sshd_config(通過修改此文件可以修改ssh的默認監(jiān)聽端口與其他參數(shù))
服務腳本:/etc/rc.d/init.d/sshd
服務啟動|停止|重啟:serveice sshd start|stop|restart
腳本配置文件:/etc/sysconfig/sshd
配置參數(shù)
# man sshd_config 查看配置參數(shù)的說明;
# vim /etc/sysconfig/sshd 通過編輯配置文件來修改配置參數(shù);
#+空格+文字:以此格式開頭的行表示改行為注釋說明;
#+文字:以此格式開頭的行表示可啟用選項,不改變則表示使用該選項的默認設置,反之使用設定值“#”要去掉哦!
例:#Port 22 如不去掉#且22不變,表示使用默認的22號端口;
若把#Port 22改成port 7777,表示把sshd的監(jiān)聽端口改成7777;
注意:修改參數(shù)與配置后,必須重啟服務(service sshd restart).
經(jīng)常需要修改的參數(shù):
[root@www ~]# cat /etc/ssh/sshd_config
# $OpenBSD: sshd_config,v 1.80 2008/07/02 02:24:18 djm Exp $
# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/local/bin:/bin:/usr/bin
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options change a
# default value.
#Port 22 #修改默認監(jiān)聽的端口;
port 7777 #把sshd的監(jiān)聽端口改成7777;
#AddressFamily any #監(jiān)聽的地址家族,指定是監(jiān)聽在IPV4上還是IPV6上,any表示所有;
#ListenAddress 0.0.0.0 #指定監(jiān)聽的地址 (0.0.0.0表示本機的所有地址);
#ListenAddress ::
# Disable legacy (protocol version 1) support in the server for new
# installations. In future the default will change to require explicit
# activation of protocol 1
Protocol 2
# HostKey for protocol version 1
#HostKey /etc/ssh/ssh_host_key #使用shhv1用到的主機密鑰;
# HostKeys for protocol version 2
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key
# Lifetime and size of ephemeral version 1 server key
#KeyRegenerationInterval 1h
#ServerKeyBits 1024 #密鑰長度;
# Logging
# obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH
SyslogFacility AUTHPRIV
#LogLevel INFO
# Authentication:
#LoginGraceTime 2m #登錄寬限期;
#PermitRootLogin yes #是否允許管理員直接登錄;
#StrictModes yes
#MaxAuthTries 6 #最大密碼輸入錯誤次數(shù);
#MaxSessions 10 #最大會話個數(shù);
#RSAAuthentication yes #是否允許使用RSA機制來認證;
#PubkeyAuthentication yes
#--------中間不長改變的配置參數(shù)略----------
Subsystem sftp /usr/libexec/openssh/sftp-server #表示是否啟動sftp功能;
# Example of overriding settings on a per-user basis
#Match User anoncvs
# X11Forwarding no
# AllowTcpForwarding no
# ForceCommand cvs server
sshd認證方式:
1、基于口令的認證;
2、基于密鑰的認證;
# ssh-keygen -t rsa 用rsa算法生成密鑰,默認密鑰為id_rsa(私鑰), id_rsa.pub(公鑰)
# ssh-keygen -f /path/to/somefile -P oldpassword 根據(jù)現(xiàn)有的密鑰文件生成密鑰
-f /path/to/somefile: 密鑰文件保存在的位置;
-P '': 指定生成舊密鑰時使用的密碼;
方法一:把本地主機生成的公鑰 id_rsa.pub使用scp復制到遠程主機的上,在遠程主機使用cat id_rsa.pub.ssh/authorized_keys追加該公鑰信息,這樣就可以實現(xiàn)基于密鑰認證的ssh登錄;
方法二:# ssh-copy-id -i .ssh/id_rsa.pub USERNAME@HOST
[root@www ~]# ssh-keygen -t rsa #用rsa算法生成密鑰;
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.
The key fingerprint is:
c2:f9:c2:3d:4d:ca:52:39:7a:a7:33:de:42:11:d3:8f root@
The key's randomart image is:
+--[ RSA 2048]----+
| . |
| o . |
| o o |
| . ...E . |
| + S.. |
| . B.= |
| =.B o |
| ++= |
| .o+. |
+-----------------+
[root@www ~]# ssh-keygen -f .ssh/id_rsa -P '' #根據(jù)現(xiàn)有密鑰文件重新生成密鑰;
Generating public/private rsa key pair.
.ssh/id_rsa already exists.
Overwrite (y/n)? y #提示是否確定要覆蓋;
Your identification has been saved in .ssh/id_rsa.
Your public key has been saved in .ssh/id_rsa.pub.
The key fingerprint is:
bf:55:f0:0b:a5:ee:4e:4a:1d:d3:b1:0e:66:ee:55:9b root@
The key's randomart image is:
+--[ RSA 2048]----+
| |
| |
| . o |
| * o |
| S O = .|
| . * B oo|
| o * +E |
| . B . |
| o.+ |
+-----------------+
#-----使用方法一:實現(xiàn)通過密鑰文件完成身份驗證(不需要輸入密碼)-----
[root@www ~]# scp .ssh/id_rsa.pub root@192.168.0.110:/root/ #使用spc命令復制公鑰文件到遠程
#主機的用戶家目錄下的.ss/路徑下;
root@192.168.0.110's password: #輸入登錄遠程主機的密碼;
id_rsa.pub 100% 397 0.4KB/s 00:00 #提示復制成功;
[root@mailCentOS6 ~]# ls .ssh/ #驗證確認文件復制成功;
id_rsa.pub known_hosts
[root@mailCentOS6 ~]# touch .ssh/authorized_keys #路徑內沒有自動驗證密鑰文件,創(chuàng)建一個;
[root@mailCentOS6 ~]# cat .ssh/id_rsa.pub .ssh/authorized_keys #把公鑰追加到自動驗證密鑰文件;
[root@www ~]# ssh 192.168.0.110
Last login: Mon May 11 20:45:10 2015 from 192.168.0.111
[root@mailCentOS6 ~]# #OK了,看到了沒有,不用輸入密碼我們就直接可以遠程登錄了?。?/p>
#-----使用方法二:實現(xiàn)通過密鑰文件完成身份驗證(不需要輸入密碼)-----
[root@mailCentOS6 ~]# rm -f .ssh/authorized_keys #刪除原有保存的自動驗證密鑰文件;
[root@www ~]# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.0.110 #使用命令自動傳輸生成自動驗證密鑰文件;
root@192.168.0.110's password:
Now try logging into the machine, with "ssh 'root@192.168.0.110'", and check in:
.ssh/authorized_keys #提示生成的文件;
to make sure we haven't added extra keys that you weren't expecting.
[root@www ~]# ssh 192.168.0.110 #驗證看看是否可以登錄;
Last login: Mon May 11 21:02:29 2015 from 192.168.0.111
[root@mailCentOS6 ~]# ls .ssh/ #看到了沒有,我們現(xiàn)在已經(jīng)登錄到了mailCentOS6這臺主機上了;
authorized_keys known_hosts
【命令補充】
scp: 利用ssh協(xié)議在主機之間實現(xiàn)安全文件傳輸?shù)墓ぞ?/p>
scp SRC1... DEST
分兩種情形:
1、源文件在本機,目標為遠程主機
# scp /path/to/somefile... USERNAME@HOST:/path/to/somewhere
源可以是目錄或文件有多個,目標必須是目錄
2、源文件在遠程,本地為目標
# scp USERNAME@HOST:/path/to/somewhere /path/to/somewhere
-r: 復制目錄時使用(實現(xiàn)遞歸復制),scp默認不能復制目錄;
-p: 保持源文件的元數(shù)據(jù)信息,包括mode和timestamp
-q: 靜默模式,復制過程不顯示狀態(tài)信息;
-p PORT: 指定ssh協(xié)議監(jiān)聽的端口(遠程主機)。
需要準備的材料分別是:電腦、linux連接工具。
1、首先連接上linux主機,進入等待輸入指令的linux命令行狀態(tài)。
2、例如尋找/home/httpd/html/目錄下的test.txt文件,在命令行狀態(tài)下,輸入指令:find /home/httpd/html/ -name "test.txt",按回車。
3、等待查詢結束后,會打印出查詢結果。
您好,命令遠程連接工具:Xshell、SecureCRT、Putty、SSH Secure Shell Client等
圖形遠程連接工具:xmanager(需安裝配置服務并打開177端口)、VNC-Viewer(linux需安裝vncserver)、windows自帶的遠程桌面(linux需安裝xrdp和vnc)
如果有什么不懂的話可以去看看《Linux就該這么學》這本書,非常適合新手學習Linux。
就是list的縮寫,通過ls 命令不僅可以查看linux文件夾包含的文件,而且可以查看文件權限(包括目錄、文件夾、文件權限)看目錄信息等等
常用參數(shù)搭配:
實例:
(changeDirectory),命令語法:cd [目錄名]。說明:切換當前目錄至dirName
實例:
查看當前工作目錄路徑
實例:
創(chuàng)建文件夾
實例:
刪除一個目錄中的一個或多個文件或目錄,如果沒有使用- r選項,則rm不會刪除目錄。如果使用rm 來刪除文件,通常仍可以將該文件恢復原狀
rm [選項] 文件…
常用參數(shù)搭配:
實例:
刪除空目錄,一個目錄被刪除之前必須是空的。(注意,rm -r dir 命令可以代替rmdir,但是很危險,萬一它突然就不是空的咧?),另外刪除某目錄時必須具有對父目錄的寫權限。
實例:
rmdir -p watch/avi刪掉avi目錄,watch目錄就空掉了,那還看什么?所以干脆把watch目錄一起刪掉,眼不見為不凈嘛。
mv命令是move的縮寫,可以用來移動文件或者將文件改名,是Linux系統(tǒng)下常用的命令,經(jīng)常用來備份文件或者目錄。
命令功能:
視mv命令中第二個參數(shù)類型的不同(是目標文件還是目標目錄),mv命令將文件重命名或將其移至一個新的目錄中。當?shù)诙€參數(shù)類型是文件時,mv命令完成文件重命名,此時,源文件只能有一個(也可以是源目錄名),它將所給的源文件或目錄重命名為給定的目標文件名。當?shù)诙€參數(shù)是已存在的目錄名稱時,源文件或目錄參數(shù)可以有多個,mv命令將各參數(shù)指定的源文件均移至目標目錄中。在跨文件系統(tǒng)移動文件時,mv先拷貝,再將原有文件刪除,而鏈至該文件的鏈接也將丟失。
命令參數(shù):
實例:
將源文件復制至目標文件,或將多個源文件復制至目標目錄。
注意:命令行復制,如果目標文件已經(jīng)存在會提示是否覆蓋,而在shell腳本中,如果不加-i參數(shù),則不會提示,而是直接覆蓋!
命令參數(shù):
實例:
cat主要有三大功能:
命令參數(shù):
實例:
功能類似于cat, more會以一頁一頁的顯示方便使用者逐頁閱讀,而最基本的指令就是按空白鍵(space)就往下一頁顯示,按 b 鍵就會往回(back)一頁顯示
命令參數(shù):
常用操作命令:
實例:
less 與 more 類似,但使用 less 可以隨意瀏覽文件,而 more 僅能向前移動,卻不能向后移動,而且 less 在查看之前不會加載整個文件。
命令參數(shù):
實例:
head 用來顯示檔案的開頭至標準輸出中,默認head命令打印其相應文件的開頭10行。
常用參數(shù):
實例:
從指定點開始將文件寫到標準輸出。使用tail命令的-f選項可以方便的查閱正在改變的日志文件,tail -f filename會把filename里最尾部的內容顯示在屏幕上,并且不斷刷新,使你看到最新的文件內容。
常用參數(shù):
實例:
用于改變linux系統(tǒng)文件或目錄的訪問權限。該命令有兩種用法。一種是包含字母和操作符表達式的文字設定法;另一種是包含數(shù)字的數(shù)字設定法。
每一文件或目錄的訪問權限都有三組,每組用三位表示,分別為文件屬主的讀、寫和執(zhí)行權限;與屬主同組的用戶的讀、寫和執(zhí)行權限;系統(tǒng)中其他用戶的讀、寫和執(zhí)行權限??墒褂胠s -l test.txt查找。
以文件log2012.log為例:
-rw-r--r-- 1 root root 296K 11-13 06:03 log2012.log
第一列共有10個位置,第一個字符指定了文件類型。在通常意義上,一個目錄也是一個文件。如果第一個字符是橫線,表示是一個非目錄的文件。如果是d,表示是一個目錄。從第二個字符開始到第十個共9個字符,3個字符一組,分別表示了3組用戶對文件或者目錄的權限。權限字符用橫線代表空許可,r代表只讀,w代表寫,x代表可執(zhí)行。
常用參數(shù):
權限范圍:
權限代號:
實例:
tar命令是類Linux中比價常用的解壓與壓縮命令。
常用參數(shù):
-c: 建立壓縮檔案
-x:解壓
-t:查看內容
-r:向壓縮歸檔文件末尾追加文件
-u:更新原壓縮包中的文件
這五個是獨立的命令,壓縮解壓都要用到其中一個,可以和別的命令連用但只能用其中一個。下面的參數(shù)是根據(jù)需要在壓縮或解壓檔案時可選的。
下面的參數(shù)-f是必須的
常見解壓/壓縮命令
chown將指定文件的擁有者改為指定的用戶或組,用戶可以是用戶名或者用戶ID;組可以是組名或者組ID;文件是以空格分開的要改變權限的文件列表,支持通配符。
常用參數(shù):
實例:
顯示磁盤空間使用情況。獲取硬盤被占用了多少空間,目前還剩下多少空間等信息,如果沒有文件名被指定,則所有當前被掛載的文件系統(tǒng)的可用空間將被顯示。默認情況下,磁盤空間將以 1KB 為單位進行顯示,除非環(huán)境變量 POSIXLY_CORRECT 被指定,那樣將以512字節(jié)為單位進行顯示。
常用參數(shù):
實例:
du命令也是查看使用空間的,但是與df命令不同的是,du能看到的文件只是一些當前存在的,沒有被刪除的,他計算的大小就是當前他認為存在的所有文件大小的累加和。du命令是對文件和目錄磁盤使用的空間的查看。
常用參數(shù):
實例:
ln命令用于將一個文件創(chuàng)建鏈接,鏈接分為軟鏈接和硬鏈接,命令默認使用硬鏈接。當在不同目錄需要該文件時,就不需要為每一個目錄創(chuàng)建同樣的文件,通過ln創(chuàng)建的鏈接(link)減少磁盤占用量。
軟鏈接:
硬鏈接:
需要注意:
常用參數(shù):
實例:
顯示或設定系統(tǒng)的日期與時間
命令參數(shù):
實例:
可以用戶顯示公歷(陽歷)日歷,如只有一個參數(shù),則表示年份(1-9999),如有兩個參數(shù),則表示月份和年份。
常用參數(shù):
實例:
強大的文本搜索命令,grep(Global Regular Expression Print)全局正則表達式搜索。
grep的工作方式是這樣的,它在一個或多個文件中搜索字符串模板。如果模板包括空格,則必須被引用,模板后的所有字符串被看作文件名。搜索的結果被送到標準輸出,不影響原文件內容。
命令格式:
grep [option] pattern file|dir
常用參數(shù):
實例:
wc(word count)功能為統(tǒng)計指定的文件中字節(jié)數(shù)、字數(shù)、行數(shù),并將統(tǒng)計結果輸出。
命令格式:
wc [option] file..
命令參數(shù):
實例:
ps(process status),用來查看當前運行的進程狀態(tài),一次性查看,如果需要動態(tài)連續(xù)結果使用top。
linux上進程有5種狀態(tài):
ps工具標識進程的5種狀態(tài)碼:
命令參數(shù):
實例:
顯示當前系統(tǒng)正在執(zhí)行的進程的相關信息,包括進程ID、內存占用率、CPU占用率等。
常用參數(shù):
發(fā)送指定的信號到相應進程。不指定型號將發(fā)送SIGTERM(15)終止指定進程。如果無法終止該程序可用“-KILL” 參數(shù),其發(fā)送的信號為SIGKILL(9) ,將強制結束進程,使用ps命令或者jobs 命令可以查看進程號。root用戶將影響用戶的進程,非root用戶只能影響自己的進程。
常用參數(shù):
實例:
顯示系統(tǒng)內存使用情況,包括物理內存、交互區(qū)內存(swap)和內核緩沖區(qū)內存。
命令參數(shù):
實例:
Netstat 是一款命令行工具,可用于列出系統(tǒng)上所有的網(wǎng)絡套接字連接情況,包括 tcp, udp 以及 unix 套接字,另外它還能列出處于監(jiān)聽狀態(tài)(即等待接入請求)的套接字。如果你想確認系統(tǒng)上的 Web 服務有沒有起來,你可以查看80端口有沒有打開。以上功能使 netstat 成為網(wǎng)管和系統(tǒng)管理員的必備利器。
命令參數(shù):
實例