ssh配置文件詳解

1、ssh詳解

1、什麼是ssh

簡單來講,ssh是一種網絡協議,用於計算機之間的加密登陸。算法

    若是一個用戶從本地計算機,使用ssh協議登陸另外一臺遠程計算機,咱們就能夠認爲,這種登陸是安全的,即便被中途截獲,密碼也不會泄露。shell

    須要指出的是,ssh只有一種協議,存在多種實現,既有商業實現,也有開源實現。vim

 

2、基本用法

(1)、使用某個用戶(例如user)登陸遠程主機host安全

命令:ssh user@hostbash

(2)、若是本地用戶名和遠程用戶名一致,則登陸時能夠省略用戶名服務器

命令:ssh host網絡

(3)、ssh的默認端口是22,也就是說,你的登陸請求會送進遠程主機的22端口。使用-p參數,能夠修改這個端口ssh

命令:ssh –p 端口號 user@hosttcp

 

3、中間人***

SSH之因此可以保證安全,緣由在於它採用了公鑰加密。整個過程以下:ide

(1)遠程主機收到用戶的登陸請求,把本身的公鑰發給用戶。

(2)用戶使用這個公鑰,將登陸密碼加密後,發送回來。

(3)遠程主機用本身的私鑰,解密登陸密碼,若是密碼正確,就贊成用戶登陸。

這個過程自己是安全的,可是實施的時候存在一個風險:若是有人截獲了登陸請求,而後冒充遠程主機,將僞造的公鑰發給用戶,那麼用戶很難辨別真僞。由於不像https協議,SSH協議的公鑰是沒有證書中心(CA)公證的,也就是說,都是本身簽發的。能夠設想,若是***者插在用戶與遠程主機之間(好比在公共的wifi區域),用僞造的公鑰,獲取用戶的登陸密碼。再用這個密碼登陸遠程主機,那麼SSH的安全機制就蕩然無存了。這種風險就是著名的"中間人***"。

4、ssh的安全驗證

SSH有本身的一套驗證方式,能夠阻攔大部分的***,固然若是有人想經過撞庫來嘗試密碼的話,就只有設置防火牆或者作其它的安全措施了。

從客戶端來看,SSH提供兩種級別的安全驗證。

(1)、第一種級別(基於口令的安全驗證)

只要你知道本身賬號和口令,就能夠登陸到遠程主機。全部傳輸的數據都會被加密,可是不能保證你正在鏈接的服務器就是你想鏈接的服務器。可能會有別的服務器在冒充真正的服務器,也就是受到「中間人」這種方式的***。

(2)、第二種級別(基於密匙的安全驗證)

須要依靠密匙,也就是你必須爲本身建立一對密匙,並把公用密匙放在須要訪問的服務器上。若是你要鏈接到SSH服務器上,客戶端軟件就會向服務器發出請求,請求用你的密匙進行安全驗證。服務器收到請求以後,先在該服務器上你的主目錄下尋找你的公用密匙,而後把它和你發送過來的公用密匙進行比較。若是兩個密匙一致,服務器就用公用密匙加密「質詢」(challenge)並把它發送給客戶端軟件。客戶端軟件收到「質詢」以後就能夠用你的私人密匙解密再把它發送給服務器。

用這種方式,你必須知道本身密匙的口令。可是,與第一種級別相比,第二種級別不須要在網絡上傳送口令。第二種級別不只加密全部傳送的數據,並且「中間人」這種***方式也是不可能的(由於他沒有你的私人密匙)。可是整個登陸的過程可能須要10秒。

 

5、口令登陸

    (1)、若是是第一次登陸對方主機,系統會出現以下圖的提示

blob.png

這段話的意思是,沒法確認host主機的真實性,只知道它的公鑰指紋,問你還想繼續鏈接嗎?

所謂"公鑰指紋",是指公鑰長度較長(這裏採用RSA算法,長達1024位),很難比對,因此對其進行MD5計算,將它變成一個128位的指紋。上例中是20:42:b3:d6:79:dc:79:ec:26:1a:54:8c:72:b7:a7:e3,再進行比較,就容易多了。

很天然的一個問題就是,用戶怎麼知道遠程主機的公鑰指紋應該是多少?回答是沒有好辦法,遠程主機必須在本身的網站上貼出公鑰指紋,以便用戶自行覈對。

(2)、假設通過風險衡量後,用戶決定接受這個遠程主機的公鑰

blob.png

    (3)、系統會出現一句提示,表示192.168.10.13主機已經獲得承認

blob.png

    (4)、輸入密碼(若是密碼正確,就能夠登陸了)

blob.png

說明:

當遠程主機的公鑰被接受之後,它就會被保存在文件$HOME/.ssh/known_hosts之中。下次再鏈接這臺主機,系統就會認出它的公鑰已經保存在本地了,從而跳過警告部分,直接提示輸入密碼。

每一個SSH用戶都有本身的known_hosts文件,此外系統也有一個這樣的文件,一般是/etc/ssh/ssh_known_hosts,保存一些對全部用戶均可信賴的遠程主機的公鑰。

6、公鑰登陸

使用密碼登陸,每次都必須輸入密碼,很是麻煩。好在SSH還提供了公鑰登陸,能夠省去輸入密碼的步驟。

所謂"公鑰登陸",原理很簡單,就是用戶將本身的公鑰儲存在遠程主機上。登陸的時候,遠程主機會向用戶發送一段隨機字符串,用戶用本身的私鑰加密後,再發回來。遠程主機用事先儲存的公鑰進行解密,若是成功,就證實用戶是可信的,直接容許登陸shell,再也不要求密碼。

(1)、這種方法要求用戶必須提供本身的公鑰。若是沒有現成的,能夠直接用ssh-keygen生成一個,以下圖所示

blob.png

說明:

運行上面的命令之後,系統會出現一系列提示,能夠一路回車。其中有一個問題是,要不要對私鑰設置口令(passphrase),若是擔憂私鑰的安全,這裏能夠設置一個。

運行結束之後,在$HOME/.ssh/目錄下,會新生成兩個文件:id_rsa.pub和id_rsa。id_rsa.pub是公鑰,id_rsa是私鑰。

(2)、這時再輸入下面的命令,將公鑰傳送到遠程主機host上面

命令:ssh-copy-id 192.168.10.12

blob.png

說明:

第一次是須要輸入密碼的,但以後ssh就不須要輸密碼了。

若是ssh-copy-id不行的話,就打開遠程主機的/etc/ssh/sshd_config這個文件,檢查下面幾行前面"#"註釋是否取掉。

  RSAAuthentication yes

  PubkeyAuthentication yes

  AuthorizedKeysFile .ssh/authorized_keys

而後,重啓遠程主機的ssh服務。

7、authorized_keys文件

遠程主機將用戶的公鑰,保存在登陸後的用戶主目錄的$HOME/.ssh/authorized_keys文件中。公鑰就是一段字符串,只要把它追加在authorized_keys文件的末尾就好了。

(1)、這裏不使用上面的ssh-copy-id命令,改用下面的命令,解釋公鑰的保存過程:  ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub

說明:

1)、"$ ssh user@host",表示登陸遠程主機;

2)、單引號中的mkdir .ssh && cat >> .ssh/authorized_keys,表示登陸後在遠程shell上執行的命令;

3)、"$ mkdir -p .ssh"的做用是,若是用戶主目錄中的.ssh目錄不存在,就建立一個;

4)、'cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub的做用是,將本地的公鑰文件~/.ssh/id_rsa.pub,重定向追加到遠程文件authorized_keys的末尾。

5)、寫入authorized_keys文件後,公鑰登陸的設置就完成了。

(2)、經過安裝lrzsz服務實現

1)、安裝lrzsz服務後,使用sz +公鑰路徑下載下來

2)、經過rz命令將下載下來的公鑰上傳到遠程主機上,將公鑰重定向追加到文件authorized_keys的末尾

3)、寫入authorized_keys文件後,公鑰登陸的設置就完成了。

 

2、ssh自定義安全設置

1、爲了ssh登錄的時候加一層保護,能夠修改默認端口。修改ssh服務配置文件/etc/ssh/sshd_config

port 2222

這樣遠程鏈接時加上端口

ssh 192.168.10.13 -p 2222

 

2、ssh使用時加-l後面跟用戶名,表示登錄到對方的這個用戶下面。

ssh -l user 192.168.10.13 -p 2222

等同於

ssh user@192.168.10.13 -p 2222

 

3、限制ssh登錄的來源ip,白名單設置(hosts.allow優先級最高)

1)、經過iptables設置ssh端口的白名單,以下設置只容許192.168.1.0/24網段的客戶機能夠遠程鏈接本機

Iptables -A INPUT -s 192.168.1.0/24 -p tcp -m state --state NEW -m tcp --dport 2222 -j ACCEPT

或者

vim /etc/sysconfig/iptables

-A INPUT -s 192.168.1.0/24 -p tcp -m state --state NEW -m tcp --dport 2222 -j ACCEPT

2)、經過/etc/hosts.allow裏面進行限制(以下),/etc/hosts.deny文件不要任何內容編輯,保持默認!

vim /etc/hosts.allow

sshd:192.168.1.*,192.168.9.*,124.65.197.154,61.148.60.42,103.10.86.7:allow

sshd:all:deny

 

4、僅容許特定的用戶經過SSH登錄

如不容許root用戶登陸;

只容許幾個指定的用戶登陸(好比wangshibo、guohuihui、liuxing用戶)

禁止某些指定的用戶登陸(好比zhangda,liqin用戶)

可是要注意:設置的這幾個用戶必須同時存在於本機和對方機器上

修改ssh服務配置文件/etc/ssh/sshd_config

PermitRootLogin no //將yes修改成no

AllowUsers wangshibo guohuihui liuxing //這個參數AllowUsers若是不存在,須要手動建立,用戶之間空格隔開;

DenyUsers zhagnda liqin //這個參數DenyUsers若是不存在,須要手動建立,用戶之間空格隔開;

也能夠設置僅容許某個組的成員經過ssh訪問主機。

AllowGroups wheel ops

 

5、取消密碼驗證,只用密鑰對驗證

修改ssh服務配置文件/etc/ssh/sshd_config

PasswordAuthentication no

PubkeyAuthentication yes

 

6、給帳號設置複雜的密碼:將密碼保存到文本進行復制和粘帖就能夠了

#rpm -ivh expect-5.43.0-5.1.i386.rpm| yum -y install expect

mkpasswd -l 128 -d 8 -C 15 -s 10                  //將下面密碼保存到文本進行復制、粘貼便可

lVj.jg&sKrf0cvtgmydqo7qPotxzxen9mefy?ej!kcaX2gQrcu2ndftkeamllznx>iHikTagiVz0$cMtqOcIypkpd,vvD*kJhs3q@sb:CiCqgtqdqvse5lssfmranbtx

參數說明:

-l 密碼長度

-d 多少個數字

-C 大寫字母個數

-s 特殊符號的個數

 

7、只容許經過指定的網絡接口來訪問SSH服務,(若是本服務器有多個IP的時候)

仍然是修改/etc/ssh/sshd_config,以下:

ListenAddress 192.168.1.15                //默認監聽的是0.0.0.0

這樣,就只容許遠程機器經過ssh鏈接本機的192.168.1.15內網ip來進行登錄了。

 

8、禁止空密碼登陸

若是本機系統有些帳號沒有設置密碼,而ssh配置文件裏又沒作限制,那麼遠程經過這個空密碼帳號就能夠登錄了,這是及其不安全的,因此必定要禁止空密碼登錄。修改/etc/ssh/sshd_config,以下:

PermitEmptyPasswords no //這一項,默認就是禁用空密碼登錄

 

9、 ssh_config和sshd_config

ssh_config和sshd_config都是ssh服務器的配置文件,兩者區別在於,前者是針對客戶端的配置文件,後者則是針對服務端的配置文件。兩個配置文件都容許你經過設置不一樣的選項來改變客戶端程序的運行方式。

 

3、ssh配置文件詳解

1、/etc/ssh/ssh_config配置文件

選項參數	                          說明
Host *	                                  選項「Host」只對可以匹配後面字串的計算機有效。「*」表示全部的計算機。
ForwardAgent no	                          設置鏈接是否通過驗證代理(若是存在)轉發給遠程計算機。
ForwardX11 no	                          設置X11鏈接是否被自動重定向到安全的通道和顯示集(DISPLAY set)
RhostsAuthentication no	                  設置是否使用基於rhosts的安全驗證
RhostsRSAAuthentication no	          設置是否使用用RSA算法的基於rhosts的安全驗證
RSAAuthentication yes	                  設置是否使用RSA算法進行安全驗證
PasswordAuthentication yes	          設置是否使用口令驗證
FallBackToRsh no	                  設置若是用ssh鏈接出現錯誤是否自動使用rsh
UseRsh no	                          設置是否在這臺計算機上使用「rlogin/rsh」
BatchMode no	                          若是設爲「yes」,passphrase/password(交互式輸入口令)的提示將被禁止。當不能交互式輸入口令的時候,這個選項對腳本文件和批處理任務十分有用
CheckHostIP yes	                          設置ssh是否查看鏈接到服務器的主機的IP地址以防止DNS欺騙。建議設置爲「yes」
StrictHostKeyChecking no	          若是設置成「yes」,ssh就不會自動把計算機的密匙加入「$HOME/.ssh/known_hosts」文件,而且一旦計算機的密匙發生了變化,就拒絕鏈接
IdentityFile ~/.ssh/identity	          設置從哪一個文件讀取用戶的RSA安全驗證標識
Port 22	                                  設置鏈接到遠程主機的端口
Cipher blowfish	                          設置加密用的密碼
EscapeChar ~	                          設置escape字符

2、/etc/ssh/sshd_config配置文件

 

參數選項                                                        說明
Port 22                                                         SSH 預設使用 22 這個 port,您也可使用多的 port !
Protocol 2,1                                                    選擇的 SSH 協議版本,能夠是 1 也能夠是 2 ,若是要同時支持二者,就必需要使用 2,1 這個分隔了!
ListenAddress 0.0.0.0                                           監聽的主機適配卡!舉個例子來講,若是您有兩個 IP,分別是 192.168.0.100 及 192.168.2.20 ,那麼只想要開放 192.168.0.100 時,就能夠寫如同下面的樣式:
ListenAddress 192.168.0.100                                     只監聽來自 192.168.0.100 這個 IP 的SSH聯機。若是不使用設定的話,則預設全部接口均接受 SSH
PidFile /var/run/sshd.pid                                       能夠放置 SSHD 這個 PID 的檔案!左列爲默認值
LoginGraceTime 600                                              當使用者連上 SSH server 以後,會出現輸入密碼的畫面,在該畫面中,在多久時間內沒有成功連上 SSH server ,就斷線!時間爲秒!
Compression yes                                                 是否可使用壓縮指令?
HostKey /etc/ssh/ssh_host_key                                   SSH version 1 使用的私鑰
HostKey /etc/ssh/ssh_host_rsa_key                               SSH version 2 使用的 RSA 私鑰
HostKey /etc/ssh/ssh_host_dsa_key                               SSH version 2 使用的 DSA 私鑰
KeyRegenerationInterval 3600                                    由前面聯機的說明能夠知道, version 1 會使用 server 的 Public Key ,每隔一段時間來從新創建一次!時間爲秒!
ServerKeyBits 768                                               Server key 的長度!
SyslogFacility AUTH                                             當有人使用 SSH 登入系統的時候,SSH會記錄信息
LogLevel INFO                                                   登陸記錄的等級---》所有
PermitRootLogin no                                              是否容許 root 登入!預設是容許的,可是建議設定成 no!
UserLogin no                                                    在 SSH 底下原本就不接受 login 這個程序的登入!
StrictModes yes                                                 當使用者的 host key 改變以後,Server 就不接受聯機
RSAAuthentication yes                                           是否使用純的 RSA 認證!?僅針對 version 1 !
PubkeyAuthentication yes                                        是否容許 Public Key ?只有 version 2
AuthorizedKeysFile   .ssh/authorized_keys                       設定若要使用不須要密碼登入的帳號時,那麼那個帳號的存放檔案所在檔名!
RhostsAuthentication no                                         本機系統不使用 .rhosts , .rhosts 不安全!
IgnoreRhosts yes                                                是否取消使用 ~/.ssh/.rhosts 來作爲認證!
RhostsRSAAuthentication no                                      針對 version 1 ,使用 rhosts 檔案在/etc/hosts.equiv配合 RSA 演算方式來進行認證!
HostbasedAuthentication no                                      這個項目與上面的項目相似,不過是給 version 2 使用的!
IgnoreUserKnownHosts no                                         是否忽略家目錄內的 ~/.ssh/known_hosts 這個檔案所記錄的主機內容
PasswordAuthentication yes                                      密碼驗證固然是須要的!
PermitEmptyPasswords no                                         上面那一項若是設定爲 yes 的話,這一項就最好設定爲 no ,這個項目在是否容許以空的密碼登入!
ChallengeResponseAuthentication yes                             挑戰任何的密碼認證!因此,任何 login.conf 規定的認證方式,都可適用!
PAMAuthenticationViaKbdInt yes                                  是否啓用其它的 PAM 模塊!啓用這個模塊將會致使 PasswordAuthentication 設定失效!

與Kerberos 有關的參數設定!底下不用設定
KerberosAuthentication no
KerberosOrLocalPasswd yes
KerberosTicketCleanup yes
KerberosTgtPassing no

有關在 X-Window 底下使用的相關設定
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes

PrintMotd no                                                    登入後是否顯示出一些信息呢?例如上次登入的時間、地點等,預設是 yes ,可是,若是爲了安全,能夠考慮改成 no !
PrintLastLog yes                                                顯示上次登入的信息!預設也是 yes 
KeepAlive yes                                                   通常而言,若是設定這項目的話,那麼 SSH Server 會傳送KeepAlive 的訊息給 Client 端,以確保二者的聯機正常!在這個狀況下,任何一端死掉後, SSH 能夠馬上知道!而不會有殭屍程序的發生!
UsePrivilegeSeparation yes                                      使用者的權限設定項目!
MaxStartups 10                                                  同時容許幾個還沒有登入的聯機畫面
DenyUsers *                                                     設定受抵擋的使用者名稱
AllowUsers *                                                    設定容許的使用者名稱


4、ssh練習

1 、配置ssh只能使用key登陸

(1)、遠程主機的配置過程(主機192.168.10.13)

1、修改主機192.168.10.13的配置文件,使其支持使用ssh私鑰登陸

Vim /etc/ssh/sshd_config

取消下面三行的註釋,如圖1所示

RSAAuthentication yes                ##設置是否使用RSA算法進行安全驗證

PubkeyAuthentication yes             ##是否容許 Public Key ?只有 version 2

AuthorizedKeysFile      .ssh/authorized_keys     ##設定若要使用不須要密碼登入的帳號時,那麼那個帳號的存放檔案所在檔名!

blob.png

圖一、取消相關注釋

重啓sshd服務便可

 

2、關閉root用戶使用密碼登陸

修改主機192.168.10.13的配置文件/etc/ssh/sshd_config,將PasswordAuthentication 後面的yes改成no,如圖2所示

PasswordAuthentication no   ##設置是否使用口令驗證

blob.png

圖二、把yes改成no

重啓sshd服務便可

(2)本機的配置過程(主機192.168.10.11)

1、使用ssh-keygen生成公鑰和私鑰,如圖3所示

blob.png

                圖三、ssh-keygen生成公鑰和私鑰

 

2、直接使用ssh口令登陸來驗證剛剛的配置是否成功

在主機192.168.10.11上,ssh 192.168.10.13咱們能夠發現ssh不進去了,如圖4所示

blob.png

               圖四、驗證使用口令是否ssh成功


3、將主機192.168.10.11的公鑰上傳到主機192.168.10.13上

(1)、安裝lrzsz服務

Yum install –y lrzsz

(2)、使用sz命令下載公鑰,如圖5所示

blob.png

                         圖五、下載公鑰


(3)、將公鑰上傳要主機192.168.10.13上,如圖6所示

blob.png

                         圖六、上傳公鑰


(3)、將公鑰追加到文件authorized_keys裏

[root@localhost ~]# cat id_rsa.pub >> /root/.ssh/authorized_keys

 

(4)、在主機192.168.10.11上驗證是否可以成功ssh到主機192.168.10.13上,如圖7所示

blob.png

              圖七、成功ssh到主機192.168.10.13

2 、指定能夠登陸的主機和不能夠登陸的主機

(1)方法1、修改文件/etc/hosts.allow和/etc/hosts.deny

1、修改主機192.168.10.13的文件/etc/hosts.allow和/etc/hosts.deny

在文件/etc/hosts.allow添加一條容許主機192.168.10.11 ssh的記錄,如圖8所示

blob.png

                    圖八、容許主機192.168.10.11 ssh

在文件/etc/hosts.deny添加一條拒絕主機192.168.10.12 ssh的記錄,如圖9所示


blob.png

                  圖九、拒絕主機192.168.10.12 ssh

 

2、驗證

在主機192.168.10.11上驗證成功ssh到主機192.168.10.13上,如圖10所示

blob.png

        圖十、主機192.168.10.11成功ssh到主機192.168.10.13


在主機192.168.10.12上驗證不能ssh到主機192.168.10.13上,如圖11所示


blob.png

          圖十一、主機192.168.10.12不能ssh到主機192.168.10.13

 

(2)方法2、修改文件/etc/ssh/sshd_config

1、修改文件/etc/ssh/sshd_config,在最後面添加如圖12所示的兩行,而後重啓sshd服務

blob.png

    圖十二、添加的內容

說明:

AllowUsers root@192.168.10.11     ##容許主機192.168.10.11 ssh登陸

DenyUsers root@192.168.10.12      ##禁止主機192.168.10.12 ssh登陸

 

2、驗證

在主機192.168.10.11上驗證成功ssh到主機192.168.10.13上,如圖13所示

blob.png

          圖1三、主機192.168.10.11成功ssh到主機192.168.10.13


在主機192.168.10.12上驗證不能ssh到主機192.168.10.13上,如圖14所示

blob.png

        圖1四、主機192.168.10.12不能ssh到主機192.168.10.13

3 、查看Linux日誌中有關ssh登陸成功和登陸失敗的日誌

ssh的日誌存放在文件/var/log/ secure

例如:

查看ssh登陸失敗的日誌,如圖15所示


blob.png

                     圖1五、ssh登陸失敗日誌

查看經過RSA成功ssh的日誌,如圖16所示

blob.png

                  圖1六、經過RSA成功ssh的日誌

5、在SecureCRT上配置公鑰的方法

在SecureCRT上配置公鑰的方法:

1、首先生成公鑰。

打開SecureCRT程序,點擊菜單欄的「工具」-》「建立公鑰」。按照步驟執行。其中一步比較重要就是選擇公鑰的格式。建議選擇「OpenSSH」,不然在服務器端使用時須要轉換爲OpenSSH格式。若是選錯了。從新生成一次就能夠了。而後選擇公鑰私鑰存放的地方。默認Identity是私鑰,Identity.pub是公鑰。


2、把Identity.pub文件上傳到你要登錄的Linux服務器上。方法有不少,好比ssh(先不要配置爲公鑰登錄),ftp等。上傳時選擇ASCII方式。


3、在SecureCRT建立服務器鏈接。協議使用ssh。在「鑑權」方法中,取消勾選「密碼」。選擇「公鑰」,而後點擊右邊的屬性按鈕,在對話框中。

使用全局公鑰設置:表示全部鏈接都使用該公鑰鏈接服務器。

使用會話公鑰設置:能夠分別爲每一個鏈接指定不一樣的公鑰。

下面的路徑就是指明私鑰的具體路徑。注意了,這裏要指明私鑰的路徑。

保存鏈接就能夠了。

相關文章
相關標籤/搜索