1. 程式人生 > >linux學習中的第一個服務器sshd

linux學習中的第一個服務器sshd

ssh sshd


服務器1之-----ssh


#終於開始記錄總結服務器了,由於經常用到sshd,也是服務器中相對簡單的一個,學起來也輕松,所以整理成博客,有問題指出哦

一:相關知識解釋

先說一下ssh和sshd:ssh 是客戶端
sshd 是服務器端

ssh: 遠程主機通過ssh協議連接sshd軟件,從而在遠程主機開啟一個bash,簡單說,SSH是一種網絡協議,用於計算機之間的加密登錄。如果一個用戶從本地計算機,使用SSH協議登錄另一臺遠程計算機,我們就可以認為,這種登錄是安全的,即使被中途截獲,密碼也不會泄露

ssh協議:為建立在應用層基礎上的安全協議,轉為遠程登陸會話和其他網絡服務提供安全性的協議 利用ssh協議可以有效防止遠程管理過程中的信息瀉漏ssh由三部分組成:

傳輸層協議:提供了服務器認證,保密性,完整性,壓縮功能,通常運行在tcp/ip連接上,該協議的認證基於主機,並且該協議不執行用戶認證,更高層的用戶認證協議可以設計在此協議之上
用戶認證協議:用於向服務器提供客戶端用戶鑒別功能,運行在傳輸層協議上當用戶認證協議開始後,他從底層協議那裏接受會話標誌符(從第一次密鑰交換中的交換哈希h),會話標誌符唯一標識此會話並且適用於標記以證明私鑰的所有權
連接協議:將多個加密隧道分成邏輯通道,他們運行在用戶認證協議上,它提供了交互式對話路,遠程命令執行,轉發tcp/ip連接和轉發x11 連接
功能:傳統的網絡服務程序,如ftp,pop,和telnet 在本質上都是不安全的,因為他們在網絡上用明文傳送口令和數據,而且這些服務程序的安全驗證方式也是有弱點的。容易受到中間人的攻擊,中間人意思就是冒充真正服務器接受你傳給服務器的數據,通過中間人做手腳,那麽文件安全性遭到破壞 但是通過ssh 可以將傳輸的文件加密,使用ssh 還有一個好處是數據是壓縮的,所以可以加快傳輸的速度
驗證:口令的安全驗證 密鑰驗證

sshd的安裝:SSH分客戶端openssh-client和服務端openssh-server,客戶端通過ssh命令連接服務端

二:兩種驗證登陸方式

1:口令的安全驗證##########

ssh    [email protected]
ssh [email protected] -X                ##調用遠程主機圖形工具
ssh     [email protected]        command        ##直接在遠程主機運行某條命令

如果本地用戶名與遠程用戶名一致,登錄時可以省略用戶名。

SSH的默認端口是22,也就是說,你的登錄請求會送進遠程主機的22端口。使用p參數,可以修改這個端口。

$ ssh -p 2222 [email protected]

上面這條命令表示,ssh直接連接遠程主機的2222端口。


如果你是第一次登錄對方主機,系統會出現下面的提示:
  這段話的意思是,無法確認host主機的真實性,只知道它的公鑰指紋,問你還想繼續連接嗎?
所謂"公鑰指紋",是指公鑰長度較長(這裏采用RSA算法,長達1024位),很難比對,所以對其進行MD5計算,將它變成一個128位的指紋。上例中是98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d,再進行比較,就容易多了。
很自然的一個問題就是,用戶怎麽知道遠程主機的公鑰指紋應該是多少?回答是沒有好辦法,遠程主機必須在自己的網站上貼出公鑰指紋,以便用戶自行核對。
假定經過風險衡量以後,用戶決定接受這個遠程主機的公鑰。  

[[email protected] Desktop]$ ssh [email protected]
The authenticity of host ‘172.25.254.1 (172.25.254.1)‘ can‘t be established.
ECDSA key fingerprint is eb:24:0e:07:96:26:b1:04:c2:37:0c:78:2d:bc:b0:08.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘172.25.254.1‘ (ECDSA) to the list of known hosts.
[email protected] password: 
Last login: Sun Jul 23 01:46:13 2017

如果密碼正確,就可以登錄了。
當遠程主機的公鑰被接受以後,它就會被保存在文件/root/.ssh/known_hosts之中。下次再連接這臺主機,系統就會認出它的公鑰已經保存在本地了,從而跳過警告部分,直接提示輸入密碼。,通常是/etc/ssh/ssh_known_hosts,保存一些對所有用戶都可信賴的遠程主機的公鑰。

2:密鑰驗證################

生成公鑰私鑰

ssh-keygen

[[email protected] .ssh]# ssh-keygen                      ##生成公鑰私鑰工具
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:
d6:db:ae:d1:95:0d:39:6c:3b:a8:97:59:91:3a:4a:06 [email protected]
The key‘s randomart image is:
+--[ RSA 2048]----+
|                 |
|             . o |
|        E     O  |
|         o   + B |
|        S + + * .|
|       . o * * . |
|          = *    |
|           +     |
|          ...    |
+-----------------+
ls /root/.ssh/                 #查看存放密鑰文件目錄
id_rsa  id_rsa.pub
id_rsa        ##私鑰,就是鑰匙
id_rsa.pub    ##公鑰,就是鎖

上鎖給server:

[[email protected] .ssh]# ssh-copy-id -i id_rsa.pub [email protected]
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected] password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh [email protected]"
and check to make sure that only the key(s) you wanted were added.

發鑰匙給client:

scp /root/.ssh/id_rsa [email protected]:/root/.ssh/

測試:

[[email protected] .ssh]# ssh [email protected]
Last login: Sun Jul 23 01:48:45 2017 from 172.25.254.67           #不需要密碼,直接使用密鑰
[[email protected] ~]#

ssh_config和sshd_config的區別?

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

三:提升ssh登陸級別
1:通過sshd服務端配置文件進行修改(針對服務器端的用戶)

/etc/ssh/sshd_config
78 PasswordAuthentication yes|no ##是否開啟用戶密碼認證,yes為支持no為關閉
48 PermitRootLogin yes|no ##是否允許超級用戶登陸
2:白名單和黑名單(針對於客戶端ip)

vim /etc/hosts.deny
~~~~
sshd:ALL #拒絕所有人連接sshd服務
~~~~
vim /etc/hosts.allow
~~~~
sshd:172.25.254.20 #允許250連接sshd服務


sshd:172.25.254.20, 172.25.254.120 #允許20和120連接sshd服務

sshd: ALL EXCEPT 172.25.254.200 #只不允許200
~~~~
註:白名單優先級更高

3.ssh登陸提示
vim /etc/motd ##用來顯示登陸後的字符
~~~~~~~
隨便寫:可以寫入登陸此用戶/ip的介紹等
~~~~~~~

四:遠程同步文件

scp/rsync  [email protected]:/需要拷貝的文件 /本機地址
scp/rsync /本地文件地址  [email protected]:/對方地址


1:scp:scp是 secure copy的縮寫, scp是linux系統下基於ssh登陸進行安全的遠程文件拷貝命令。linux的scp命令可以在linux服務器之間復制文件和目錄.
scp命令的用處:
scp在網絡上不同的主機之間復制文件,它使用ssh安全協議傳輸數據,具有和ssh一樣的驗證機制,從而安全的遠程拷貝文件。
2:rsync:rysnc是一個數據鏡像及備份工具,具有可使本地和遠程兩臺主機的文件,目錄之間,快速同步鏡像,遠程數據備份等功能。在同步過程中,rsync是根據自己獨特的算法,只同步有變化的文件,甚至在一個文件裏只同步有變化的部分,所以可以實現快速的同步數據的功能。
rsync -r ##同步目錄
rsync -l ##同步包含鏈接
rsync -p ##同步文件權限
rsync -t ##同步文件時間戳
rsync -g ##同步文件

五:ssh的轉發

綁定本地端口

既然SSH可以傳送數據,那麽我們可以讓那些不加密的網絡連接,全部改走SSH連接,從而提高安全性
假定我們要讓8080端口的數據,都通過SSH傳向遠程主機,命令就這樣寫:

$ ssh -D 8080 [email protected]

SSH會建立一個socket,去監聽本地的8080端口。一旦有數據傳向那個端口,就自動把它轉移到SSH連接上面,發往遠程主機。可以想象,如果8080端口原來是一個不加密端口,現在將變成一個加密端口。

本地端口轉發

有時,綁定本地端口還不夠,還必須指定數據傳送的目標主機,從而形成點對點的"端口轉發"。為了區別後文的"遠程端口轉發",我們把這種情況稱為"本地端口轉發"(Local forwarding)。
假定host1是本地主機,host2是遠程主機。由於種種原因,這兩臺主機之間無法連通。但是,另外還有一臺host3,可以同時連通前面兩臺主機。因此,很自然的想法就是,通過host3,將host1連上host2。
我們在host1執行下面的命令:

$ ssh -L 2121:host2:21 host3

命 令中的L參數一共接受三個值,分別是"本地端口:目標主機:目標主機端口",它們之間用冒號分隔。這條命令的意思,就是指定SSH綁定本地端口2121, 然後指定host3將所有的數據,轉發到目標主機host2的21端口(假定host2運行FTP,默認端口為21)。
這樣一來,我們只要連接host1的2121端口,就等於連上了host2的21端口。

$ ftp localhost:2121

"本地端口轉發"使得host1和host3之間仿佛形成一個數據傳輸的秘密隧道,因此又被稱為"SSH隧道"。

遠程端口轉發

此項暫時未農明白,後續更


本文出自 “12462896” 博客,請務必保留此出處http://12472896.blog.51cto.com/12462896/1950190

linux學習中的第一個服務器sshd