ssh -p port user@host user@host's password:
輸入端口,用戶名,服務器ip地址後,還需輸入密碼,而且每次從新登陸都要輸入。使用 scp 上傳下載文件也是這樣。
原理: 參考:https://www.tuicool.com/articles/qyiyim
SSH之因此可以保證安全,緣由在於它採用了公鑰加密。html
整個ssh密碼登陸過程是這樣的:linux
1)用戶向遠程主機發登陸請求:ssh user@host算法
2)遠程主機收到用戶的登陸請求,把本身的公鑰發給用戶。vim
2)用戶使用這個公鑰,將登陸密碼加密後,發送回遠程主機。安全
3)遠程主機用本身的私鑰,解密登陸密碼,若是密碼正確,就贊成用戶登陸。服務器
在linux上,若是你是第一次登陸對方主機,系統會出現下面的提示:ssh
$ ssh user@host The authenticity of host 'host (12.18.429.21)' can't be established. RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d. Are you sure you want to continue connecting (yes/no)?
這段話的意思是,沒法確認host主機的真實性,只知道它的公鑰指紋,問你還想繼續鏈接嗎?
所謂"公鑰指紋",是指公鑰長度較長(這裏採用RSA算法,長達1024位),很難比對,因此對其進行MD5計算,將它變成一個128位的指紋。上例中是98:2e:d7:e0🇩🇪9f:ac:67:28:c2:42:2d:37:16:58:4d,再進行比較,就容易多了。
很天然的一個問題就是,用戶怎麼知道遠程主機的公鑰指紋應該是多少?回答是沒有好辦法,遠程主機必須在本身的網站上貼出公鑰指紋,以便用戶自行覈對。
假定通過風險衡量之後,用戶決定接受這個遠程主機的公鑰。ide
Are you sure you want to continue connecting (yes/no)? yes
系統會出現一句提示,表示host主機已經獲得承認。網站
Warning: Permanently added 'host,12.18.429.21' (RSA) to the list of known hosts.
而後,會要求輸入密碼。ui
Password: (enter password)
若是密碼正確,就能夠登陸了。
當遠程主機的公鑰被接受之後,它就會被保存在文件$HOME/.ssh/known_hosts之中。下次再鏈接這臺主機,系統就會認出它的公鑰已經保存在本地了,從而跳過警告部分,直接提示輸入密碼。
每一個SSH用戶都有本身的known_hosts文件,分別在本身的$HOME目錄下,此外操做系統也有一個這樣的文件,一般是/etc/ssh/ssh_known_hosts,保存一些對全部用戶均可信賴的遠程主機的公鑰。
SSH還提供了公鑰登陸,能夠省去輸入密碼的步驟。
使用公鑰登陸,首先你要有公鑰。看下這個目錄(~/.ssh/)下是否存在id_rsa.pub和id_rsa這兩個文件。
沒有的話,運行此命令:
$ ssh-keygen
會在 ~/.ssh 目錄下生成兩個文件 d_rsa.pub和id_rsa ,前者是公鑰,後者是你的私鑰。
公鑰生成後,運行:
ssh-copy-id -i ~/.ssh/id_rsa.pub -p port user@host
好了,今後你再登陸此遠程主機,就不須要輸入密碼了。
若是仍是不行,就打開遠程主機的/etc/ssh/sshd_config這個文件,檢查下面幾行前面"#"註釋是否取掉。
RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized\_keys
而後,重啓遠程主機的ssh服務。
原理:
公鑰登陸是爲了解決每次登陸服務器都要輸入密碼的問題,流行使用RSA加密方案,主要流程包含:
一、客戶端生成RSA公鑰和私鑰
二、客戶端將本身的公鑰存放到服務器
三、客戶端請求鏈接服務器,服務器將一個隨機字符串發送給客戶端
四、客戶端根據本身的私鑰加密這個隨機字符串以後再發送給服務器
五、服務器接受到加密後的字符串以後用公鑰解密,若是正確就讓客戶端登陸,不然拒絕。這樣就不用使用密碼了。
對公鑰和私鑰的說明可參考:https://www.cnblogs.com/scofi/p/6617394.html
找一個目錄建立一個普通文件,例:vim 12.20_prod_aide
編輯一下內容,把本身的信息填寫上去。
#!/usr/bin/expect set PORT 22 set HOST ***.**.12.20 set USER root set PASSWORD ************ spawn ssh -p $PORT $USER@$HOST expect { "yes/no" {send "yes\r";exp_continue;} "*password:*" { send "$PASSWORD\r" } } interact
打開iterm2 -> preferences -> Profiles
點擊下面「+」號,新建一個profile。
選擇Command 在輸入框中輸入
expect+剛纔建的文件路徑
此時就設置好了
點擊菜單欄的profiles就能夠看見剛纔新建的12.20的profiles,選擇就直接登上了遠程服務器。
快捷放肆 command+o ,選擇你設定的profile