ssh的基本介紹與應用

ssh是一種網絡協議,用於計算機之間的加密登錄,一個用戶從本地電腦使用ssh協議登錄另一臺遠程計算機,我們認爲這種登錄方式是安全的。即使被中途截獲,密碼也不會泄露。

ssh登錄的流程

  • 遠程主機收到用戶的登錄請求,把自己的公鑰發給用戶,
  • 用戶使用這個公鑰將用戶的登錄密碼加密後發送回來,
  • 遠程主機使用自己的私鑰解密登錄密碼,如果密碼正確就同意用戶登錄

ssh中間人攻擊:

有人截獲了登錄請求,然後冒充遠程主機,將僞造的公鑰發送給用戶,使用僞造的公鑰獲取用戶的登錄密碼。這樣ssh的安全機制就出現問題了
出現上面的原因是:ssh協議的公鑰是沒有證書中心公正(https有證書)的,都是自己簽發的。

ssh基本用法

口令登錄

  • 使用用戶名登錄:ssh [email protected],如果本地的用戶名與遠程的用戶名相同,登錄的時候可以使省略用戶名。
  • ssh默認的端口是22,當你沒有設置端口的時候,你的登錄請求會被推送到遠程主機的22端口,
  • 使用p參數可以修改端口號,ssh -p 32 [email protected]

公鑰登錄

公鑰登錄可以不用每次都必須輸入密碼,所謂的公鑰登錄,就是用戶將自己的公鑰存儲在遠程主機上,登錄的時候遠程主機會向用戶發送一段隨機字符串,用戶用自己的私鑰加密後再發送回來,遠程主機使用事先存儲的公鑰進行解密,如果成功直接允許登錄shell。
這種方式要求用戶必須提供自己的公鑰,如果沒有現成的可以使用ssh-keygen生成一個,建立本地git倉庫就是這樣的一個操作。

ssh數據傳輸

$ ssh user@host ‘mkdir -p .ssh && cat >> .ssh/authorized_keys’ < ~/.ssh/id_rsa.pub
單引號中間的部分,表示在遠程主機上執行的操作。後面的輸入重定向,表示數據通過ssh傳向遠程主機。
ssh可以在用戶和遠程主機之間建立命令和數據的傳輸通道。所以很多事情都可以通過ssh來完成

  • 將本地的文件複製到遠程主機
    • $ cd && tar czv src | ssh user@host ‘tar’ xzv
  • 將遠程主機的文件複製到本地
    • $ ssh user@host ‘tar cz src’ | tar xzv
  • 查看主機是否運行某個進程
    • $ ssh user@host ‘ps ax |grep xxx’

scp(secure copy)跨機遠程拷貝

用於在linux下進行遠程拷貝文件的命令,和它類似的命令有cp,不過cp只能在本機,不能跨服務器,而且scp的傳輸是加密的。可能會稍微影響速度,並且兩臺主機之間的操作相互有操作權限。

綁定本地端口

利用ssh傳送數據的特點,我們可以讓不加密的網絡連接全部走ssh,從而提高數據傳輸的安全性

    // 讓8080端口的數據,都通過ssh傳向遠程主機
    $ ssh -D 8080 user@host

ssh會建立一個socket,去監聽本地的8080端口,一旦有數據傳向那個端口。就自動把它移到SSH鏈接上發往遠程主機。將不加密的8080端口現在全部改成加密的端口。

本地端口轉發

某些應用場景中綁定本地端口還不行,還需要指定數據的傳送主機,形成點對點的"端口轉發"。

// host1(本地主機),host2(遠程主機) host3()
// host1無法連接到host2,但是host3可以連接host1,和host2,所以我們通過host3將host1和host2連接起來。
// host1:
$ ssh -L 8080:host2:21 host3 // L參數接受三個值:本地端口:目標主機:目標主機端口,
// 上面命令的意思是:指定ssh綁定本地端口8080,然後指定host3將所有的數據轉發到目標主機host2的21端口(假設host2運行FTP,默認端口是21),這樣一來我們只要連接上host1的8080端口就相當於連上了host2的21端口。

$ ftp localhost:8080 

// 本地轉發使得host1和host3之間彷彿形成了一個數據傳輸的祕密隧道,因此又被稱爲"SSH隧道"

遠程端口轉發

綁定遠程端口轉發
藉助上面的案例,同樣是host1和host2無法連接

// host1(外網機器) host2() host3(內網機器)
host3是內網機器,可以使用host3連接host1,但是使用host1不能連接host3,本地轉發就不行了,
解決辦法:host3上建立與host1的連接,然後在host1上使用這個連接。
// 在host3中執行這個 
$ ssh -R 8080:host2:21 host1  // R接受三個值:遠程主機端口:目標主機:目標主機端口

上面命令的意思是:讓host1監聽自己的8080端口,然後將所有的數據經過host3,轉發到host2:21端口,對於host3來說host1就是遠程主機端口。

然後我們就可以在host1連接host2
$ ftp localhost:2121
注意:遠程端口轉發的前提條件是:host1和host3兩臺主機都有sshd和ssh客戶端

引用:
https://www.cnblogs.com/wukaikk/p/7791561.html
https://www.cnblogs.com/ftl1012/p/ssh.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章