SSH 免密登錄是怎么玩兒的译红?

歡迎Follow我的GitHub, 關(guān)注我的CSDN. 其余參考Android目錄.微信公眾號(hào):程序員小樂

每日英文

Don't be afraid of the space between your dreams and reality. If you can dream it, you can make it so.

別害怕夢(mèng)想和現(xiàn)實(shí)的距離金拒。只有想不到,沒有做不到。

小樂有話說

愿你所有的努力都不白費(fèi),所想的都能如愿铃拇,所做的都能實(shí)現(xiàn),愿你往后路途沈撞, 深情不再枉付慷荔。

來自 / biezhi

鏈接 / blog.biezhi.me/2017/08/ssh-no-password-login.html

image

責(zé)編:樂樂 | 封面來自網(wǎng)絡(luò)

00 序言

作為一名后端開發(fā),經(jīng)常會(huì)遇到SSH登錄缠俺,Git 提交等事務(wù)显晶,而當(dāng)你有很多服務(wù)器的時(shí)候使用密碼可能不是一個(gè)好的選擇了, 就像我要登錄自己的服務(wù)器壹士、公司各個(gè)環(huán)境的服務(wù)器磷雇,雖然有工具可以幫我們做這些,但我習(xí)慣在命令行下操作躏救。 下面我?guī)懔私庖幌旅饷艿卿浀脑砗腿绾螌?shí)現(xiàn)唯笙。

01 基本概念

SSH協(xié)議

SSH 是一種計(jì)算機(jī)之間加密登錄的協(xié)議,它相對(duì)于 telnetrsh 的明文傳輸, 提供了加密崩掘、校驗(yàn)和壓縮七嫌,使得我們可以很安全的遠(yuǎn)程操作, 而不用擔(dān)心信息泄露(當(dāng)然不是絕對(duì)的呢堰,加密總有可能被破解抄瑟,只是比起明文來說那是強(qiáng)了不少)。

加密

加密的意思是將一段數(shù)據(jù)經(jīng)過處理之后枉疼,輸出為一段外人無法或者很難破譯的數(shù)據(jù)皮假,除了指定的人可以解密之外。 一般來說骂维,加密的輸入還會(huì)有一個(gè)key惹资,這個(gè)key作為加密的參數(shù),而在解密的時(shí)候也會(huì)用一個(gè)相關(guān)聯(lián)(有可能是相同)的key作為輸入航闺。 粗略來說是下面的流程:

# 加密方encrypted_data = encrypt(raw_data, key)# 解密方raw_data = decrypt(encrypted_data, key1)

目前主流的加密算法一般分為下面兩類:

  1. 私鑰(secret key)加密褪测,也稱為對(duì)稱加密

  2. 公鑰(public key)加密

私鑰加密

所謂的私鑰加密,是說加密方和解密方用的都是同一個(gè)key潦刃,這個(gè)key對(duì)于加密方和解密方來說是保密的侮措, 第三方是不能知道的。在第三方不知道私鑰的情況下乖杠,是很難將加密的數(shù)據(jù)解密的分扎。 一般來說是加密方先產(chǎn)生私鑰,然后通過一個(gè)安全的途徑來告知解密方這個(gè)私鑰胧洒。

公鑰加密

公鑰加密畏吓,是說解密的一方首先生成一對(duì)密鑰,一個(gè)私鑰一個(gè)公鑰卫漫,私鑰不會(huì)泄漏出去菲饼,而公鑰則是可以任意的對(duì)外發(fā)布的。 用公鑰進(jìn)行加密的數(shù)據(jù)列赎,只能用私鑰才能解密宏悦。加密方首先從解密方獲取公鑰,然后利用這個(gè)公鑰進(jìn)行加密粥谬,把數(shù)據(jù)發(fā)送給解密方肛根。 解密方利用私鑰進(jìn)行解密。如果解密的數(shù)據(jù)在傳輸?shù)倪^程中被第三方截獲漏策,也不用擔(dān)心,因?yàn)榈谌經(jīng)]有私鑰臼氨,沒有辦法進(jìn)行解密掺喻。

公鑰加密的問題還包括獲取了公鑰之后,加密方如何保證公鑰來自于確定的一方,而不是某個(gè)冒充的機(jī)器感耙。 假設(shè)公鑰不是來自我們信任的機(jī)器褂乍,那么就算我們用公鑰加密也沒有用,因?yàn)榧用苤蟮臄?shù)據(jù)是發(fā)送給了冒充的機(jī)器即硼, 該機(jī)器就可以利用它產(chǎn)生的私鑰進(jìn)行解密了逃片。所以公鑰加密里面比較重要的一步是身份認(rèn)證。

需要說明一下只酥,一般的私鑰加密都會(huì)比公鑰加密快褥实,所以大數(shù)據(jù)量的加密一般都會(huì)使用私鑰加密, 而公鑰加密會(huì)作為身份驗(yàn)證和交換私鑰的一個(gè)手段裂允。

數(shù)據(jù)一致性/完整性

數(shù)據(jù)一致性說得是如何保證一段數(shù)據(jù)在傳輸?shù)倪^程中沒有遺漏损离、破壞或者修改過。一般來說绝编,目前流行的做法是對(duì)數(shù)據(jù)進(jìn)行hash僻澎, 得到的hash值和數(shù)據(jù)一起傳輸,然后在收到數(shù)據(jù)的時(shí)候也對(duì)數(shù)據(jù)進(jìn)行hash十饥,將得到的hash值和傳輸過來的hash值進(jìn)行比對(duì)窟勃, 如果是不一樣的,說明數(shù)據(jù)已經(jīng)被修改過逗堵;如果是一樣的秉氧,則說明極有可能是完整的。

目前流行的hash算法有 MD5 和 SHA-1 算法砸捏。

身份驗(yàn)證

身份驗(yàn)證說的是谬运,判斷一個(gè)人或者機(jī)器是不是就是你想要聯(lián)系的。也就是說如果A想要和B通信垦藏,一般來說開始的時(shí)候會(huì)交換一些數(shù)據(jù)梆暖, A怎么可以判斷發(fā)送回來的數(shù)據(jù)就真的是B發(fā)送的呢?現(xiàn)實(shí)中有很多方法可以假冒一個(gè)機(jī)器掂骏。

在SSH里面轰驳,這主要是通過公鑰來完成的。首先客戶端會(huì)有一個(gè)公鑰列表弟灼,保存的是它信任的機(jī)器上面的公鑰级解。 在開始SSH連接之后,服務(wù)器會(huì)發(fā)送過來一個(gè)公鑰田绑,然后客戶端就會(huì)進(jìn)行查找勤哗,如果這個(gè)公鑰在這個(gè)列表里面,就說明這個(gè)機(jī)器是真的服務(wù)器掩驱。

當(dāng)然實(shí)際的情況會(huì)復(fù)雜一些芒划。實(shí)際上服務(wù)器不是真的發(fā)送公鑰過來冬竟,因?yàn)檫@很容易被第三方盜取。

02 免密碼登錄

1民逼、在自己的操作系統(tǒng)上生成一對(duì)SSH KEY泵殴,如果已經(jīng)存在可以不生成。

2拼苍、將公鑰上傳到服務(wù)器上笑诅。

生成SSH密鑰和公鑰

ssh-keygen -t rsa

這樣會(huì)在當(dāng)前目錄生成名為id_rsa的私鑰文件和名為id_rsa.pub的公鑰文件,-t表示密鑰類型是rsa疮鲫。 如果你只輸入ssh-keygen生成的RSA密鑰長度為2048吆你,如果你對(duì)安全性要求比較高可以指定4096位的長度:

ssh-keygen -b 4096 -t rsa

這里-b就是多少位,當(dāng)然你對(duì)這些參數(shù)感興趣可以使用--help參數(shù)看看具體的含義和解釋棚点。

當(dāng)你在生成SSHKEY的時(shí)候在命令行下會(huì)提示你Enter file in which to save the key早处,讓你確認(rèn)密鑰文件保存的路徑, 一般回車即可(一般默認(rèn)會(huì)在當(dāng)前用戶家目錄下的.ssh目錄下)瘫析。

第二個(gè)提示是 Enter passphrase (empty for no passphrase) 讓你輸入一個(gè)密鑰的密碼砌梆,如果不輸入則留空;回車生成公私鑰完畢 :) 此時(shí)你可以使用cat命令看下自己的公私鑰贬循。

服務(wù)器配置

我們前面在自己的操作系統(tǒng)生成了公私鑰咸包,然后將公鑰的內(nèi)容告訴給服務(wù)器就可以了,讓服務(wù)器知道自己公鑰的操作方式還蠻多的杖虾。

上傳公鑰文件

將本地的公鑰文件上傳到服務(wù)器上烂瘫,然后在服務(wù)器需要免密登錄的用戶家目錄下查看是否有 ~/.ssh/authorized_keys 這個(gè)文件, 如果沒有手動(dòng)創(chuàng)建一個(gè):

touch ~/.ssh/authorized_keys

然后我們將公鑰內(nèi)容寫入到authorized_keys文件中奇适,因?yàn)檫@個(gè)文件可能已經(jīng)有內(nèi)容了坟比,所以你可以使用如下方式

cat -n ~/.ssh/rsa.pub ~/.ssh/authorized_keys

這樣就將公鑰內(nèi)容追加到authorized_keys中了,然后需要注意配置權(quán)限了嚷往,否則SSH不會(huì)工作的葛账,我在這里踩了坑。皮仁。

  1. 將.ssh目錄的權(quán)限為700
  1. 將authorized_keys目錄的權(quán)限為600

ssh-copy-id 復(fù)制公鑰

這個(gè)工具還蠻有用的籍琳,不過它會(huì)將我本地的所有公鑰都傳到服務(wù)器,使用方法:

ssh-copy-id username@remote-server

因?yàn)槲业姆?wù)器SSH端口不是22贷祈,所以使用 ssh-copy-id 登錄用戶@服務(wù)器IP -p端口

**03 試試運(yùn)用 **

我們完成了這些步驟是不是就可以免密登錄了呢趋急?是的,你現(xiàn)在登錄服務(wù)器:

ssh user@host -p22

注意修改你自己的登錄信息势誊。

再簡單一點(diǎn)

我們前面生成SSHKEY的時(shí)候還有一個(gè)私鑰沒用到呜达,這是干什么用的呢? 公鑰是公開的粟耻,任何人都可以獲得闻丑,私鑰則是保密的漩怎,只有本地存儲(chǔ)了一份勋颖,

配置本地的ssh嗦嗡,修改 ~/.ssh/config 文件:

Host yourserver  HostName 192.168.11.22  Port 12345  User username  IdentityFile ~/.ssh/id_rsa

這里的 Host 是我們要登錄的服務(wù)器的別名,為了方便快捷登錄饭玲,下面是服務(wù)器的信息侥祭,最后一項(xiàng)是你的私鑰路徑。

完成這個(gè)配置后我們就可以使用 ssh yourserver茄厘,進(jìn)行登錄啦~

Github添加公鑰

我經(jīng)常會(huì)用到Github提交矮冬,拉取代碼,總不能每次都輸入用戶名和密碼吧次哈。胎署。 于是在Github上添加我自己的公鑰即可

image

配置完成后從你自己倉庫的提交、拉取等操作就不用再輸密碼了窑滞。

04 常見問題

ssh key Key is invalid

密鑰錯(cuò)誤琼牧,或者配置錯(cuò)誤

github ssh key Key is invalid. Ensure you’ve copied the file correctly

在github上添加新key時(shí),沒有正確拷貝 ~/.ssh/id_rsa.pub 內(nèi)容所致哀卫。 一般發(fā)生在linux下巨坊,因?yàn)閣indows下用 notepa++ 打開這個(gè)文件并復(fù)制一般是沒有問題的, 而linux下使用vim打開再復(fù)制就會(huì)因?yàn)関im添加了回車而導(dǎo)致key添加失敗此改。

解決辦法是:使用cat命令將 ~/.ssh/id_rsa.pub 內(nèi)容輸出到終端趾撵,再拷貝。

參考資料:

猜你有話說

歡迎你在留言區(qū)和我分享你的想法共啃,讓我們一同探討提高占调。小樂期待你的分享!

image

猜你還想看

阿里移剪、騰訊究珊、百度、華為挂滓、京東最新面試題匯集

設(shè)計(jì)和實(shí)現(xiàn)一款輕量級(jí)的爬蟲框架

紅黑樹插入算法實(shí)現(xiàn)原理分析

如何通俗理解設(shè)計(jì)模式及其思想苦银!

搜索引擎:該如何設(shè)計(jì)你的倒排索引?

這里有技術(shù)赶站、心得幔虏、算法職場(chǎng)贝椿、感悟想括、面經(jīng),做一個(gè)有趣的幫助程序員成長的公眾號(hào)烙博。看完本文有收獲瑟蜈?請(qǐng)轉(zhuǎn)發(fā)分享給更多人烟逊。
PS:如何您想進(jìn)技術(shù)群交流,關(guān)注公眾號(hào)在后臺(tái)回復(fù) “加群”铺根,或者 “學(xué)習(xí)” 即可宪躯。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市位迂,隨后出現(xiàn)的幾起案子访雪,更是在濱河造成了極大的恐慌,老刑警劉巖掂林,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件臣缀,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡泻帮,警方通過查閱死者的電腦和手機(jī)精置,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锣杂,“玉大人脂倦,你說我怎么就攤上這事《滋茫” “怎么了狼讨?”我有些...
    開封第一講書人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長柒竞。 經(jīng)常有香客問我政供,道長,這世上最難降的妖魔是什么朽基? 我笑而不...
    開封第一講書人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任布隔,我火速辦了婚禮,結(jié)果婚禮上稼虎,老公的妹妹穿的比我還像新娘衅檀。我一直安慰自己,他們只是感情好霎俩,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開白布哀军。 她就那樣靜靜地躺著,像睡著了一般打却。 火紅的嫁衣襯著肌膚如雪杉适。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,488評(píng)論 1 302
  • 那天柳击,我揣著相機(jī)與錄音猿推,去河邊找鬼。 笑死捌肴,一個(gè)胖子當(dāng)著我的面吹牛蹬叭,可吹牛的內(nèi)容都是我干的藕咏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼秽五,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼孽查!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起筝蚕,我...
    開封第一講書人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤卦碾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后起宽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡济榨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年坯沪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了辰企。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阱表。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖川尖,靈堂內(nèi)的尸體忽然破棺而出丐一,到底是詐尸還是另有隱情藻糖,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布库车,位于F島的核電站巨柒,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏柠衍。R本人自食惡果不足惜洋满,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望珍坊。 院中可真熱鬧牺勾,春花似錦、人聲如沸阵漏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽履怯。三九已至回还,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間虑乖,已是汗流浹背懦趋。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留疹味,地道東北人仅叫。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓帜篇,卻偏偏與公主長得像,于是被迫代替她去往敵國和親诫咱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子笙隙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354