1、什麼是SSH?html
SSH是一種網絡協議,用於計算機之間的加密登陸。使用SSH協議登陸另外一臺遠程計算機,咱們就能夠認爲,這種登陸是安全的,即便被中途截獲,密碼也不會泄露。shell
2、LInux下的基本用法ubuntu
SSH用於遠程登錄。假定你要以用戶名root登錄主機host,只要使用以下命令安全
ssh root@host
若是本地用戶名與遠程用戶名一致,登錄時能夠省略用戶名網絡
ssh host
SSH默認端口號是22,採用P參數,能夠修改這個端口。ssh
ssh -p 2222 user@host
上面這條命令表示,ssh直接鏈接遠程主機的2222端口。網站
3、中間人攻擊加密
SSH之因此可以保證安全,緣由在於採用了公鑰加密。spa
過程:rest
1 (1) 遠程主機接受到用戶的登陸請求,把本身的公鑰發送給登錄用戶 2 (2) 用戶使用這個公鑰,將登陸密碼加密後,發送回遠程主機 3 (3) 遠程主機用本身的私鑰,解密登陸密碼,若是密碼正確,就贊成用戶登陸 4 5 6 存在的風險: 7 若是在發送登陸請求的時候就被某些人截獲登錄的請求,而後冒充遠程主機,
將僞造的公鑰發送給用戶,用戶難以辨真僞。不像https協議有證書認證中心(CA),SSH的認證嗾使本身簽發的。
若是攻擊者插在用戶與遠程主機之間(好比在公共的wifi區域),用僞造的公鑰,獲取用戶的登陸密碼。
再用這個密碼登陸遠程主機,那麼SSH的安全機制就不起做用了。
如何應對中間人攻擊?
4、口令登陸
1 若是第一次登錄遠程主機,沒法確認host主機的真實性,只知道它的公鑰指紋.怎麼知道這個公鑰指紋是否是想要登錄的目標主機的公鑰指紋呢?因此遠程主機必須在本身的網站上貼出公鑰指紋,以便用戶自行覈對. 沒問題後輸入密碼就能夠登陸了. 2 3 當遠程主機的公鑰被接受之後,它就會被保存在文件$HOME/.ssh/known_hosts之中。下次再鏈接這臺主機,系統就會認出它的公鑰已經保存在本地了,從而跳過警告部分,直接提示輸入密碼。
5、公鑰登陸
每次輸入密碼比較繁瑣.用戶將本身的公鑰存儲在遠程主機上.登錄的時候遠程主機像用戶發送一串隨機字符串,用戶用本身的私鑰加密後再發給遠程主機,遠程主機再用事先存儲好的用戶的公鑰進行解密,若是解密成功就說明用戶是可信的,直接容許登陸shell,再也不要求密碼.
這種方法要求用戶必須提供本身的公鑰。若是沒有現成的,能夠直接用ssh-keygen生成一個:
$ ssh-keygen
運行上面的命令之後,系統會出現一系列提示,能夠一路回車。其中有一個問題是,要不要對私鑰設置口令(passphrase),若是擔憂私鑰的安全,這裏能夠設置一個。運行結束之後,在$HOME/.ssh/目錄下,會新生成兩個文件:id_rsa.pub和id_rsa。前者是你的公鑰,後者是你的私鑰。
這時再輸入下面的命令,將公鑰傳送到遠程主機host上面:
$ ssh-copy-id user@host
好了,今後你再登陸,就不須要輸入密碼了。
若是仍是不行,就打開遠程主機的/etc/ssh/sshd_config這個文件,檢查下面幾行前面"#"註釋是否取掉。
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
而後,重啓遠程主機的ssh服務。
// ubuntu系統 service ssh restart // debian系統 /etc/init.d/ssh restart
http://www.ruanyifeng.com/blog/2011/12/ssh_port_forwarding.html