SSH 免密登录是怎么玩儿的?

欢迎Follow我的GitHub, 关注我的CSDN. 其余参考Android目录.微信公众号:程序员小乐

每日英文

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

别害怕梦想和现实的距离。只有想不到,没有做不到。

小乐有话说

愿你所有的努力都不白费,所想的都能如愿,所做的都能实现,愿你往后路途, 深情不再枉付。

来自 / biezhi

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

image

责编:乐乐 | 封面来自网络

00 序言

作为一名后端开发,经常会遇到SSH登录,Git 提交等事务,而当你有很多服务器的时候使用密码可能不是一个好的选择了, 就像我要登录自己的服务器、公司各个环境的服务器,虽然有工具可以帮我们做这些,但我习惯在命令行下操作。 下面我带你了解一下免密登录的原理和如何实现。

01 基本概念

SSH协议

SSH 是一种计算机之间加密登录的协议,它相对于 telnetrsh 的明文传输, 提供了加密、校验和压缩,使得我们可以很安全的远程操作, 而不用担心信息泄露(当然不是绝对的,加密总有可能被破解,只是比起明文来说那是强了不少)。

加密

加密的意思是将一段数据经过处理之后,输出为一段外人无法或者很难破译的数据,除了指定的人可以解密之外。 一般来说,加密的输入还会有一个key,这个key作为加密的参数,而在解密的时候也会用一个相关联(有可能是相同)的key作为输入。 粗略来说是下面的流程:

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

目前主流的加密算法一般分为下面两类:

  1. 私钥(secret key)加密,也称为对称加密

  2. 公钥(public key)加密

私钥加密

所谓的私钥加密,是说加密方和解密方用的都是同一个key,这个key对于加密方和解密方来说是保密的, 第三方是不能知道的。在第三方不知道私钥的情况下,是很难将加密的数据解密的。 一般来说是加密方先产生私钥,然后通过一个安全的途径来告知解密方这个私钥。

公钥加密

公钥加密,是说解密的一方首先生成一对密钥,一个私钥一个公钥,私钥不会泄漏出去,而公钥则是可以任意的对外发布的。 用公钥进行加密的数据,只能用私钥才能解密。加密方首先从解密方获取公钥,然后利用这个公钥进行加密,把数据发送给解密方。 解密方利用私钥进行解密。如果解密的数据在传输的过程中被第三方截获,也不用担心,因为第三方没有私钥,没有办法进行解密。

公钥加密的问题还包括获取了公钥之后,加密方如何保证公钥来自于确定的一方,而不是某个冒充的机器。 假设公钥不是来自我们信任的机器,那么就算我们用公钥加密也没有用,因为加密之后的数据是发送给了冒充的机器, 该机器就可以利用它产生的私钥进行解密了。所以公钥加密里面比较重要的一步是身份认证。

需要说明一下,一般的私钥加密都会比公钥加密快,所以大数据量的加密一般都会使用私钥加密, 而公钥加密会作为身份验证和交换私钥的一个手段。

数据一致性/完整性

数据一致性说得是如何保证一段数据在传输的过程中没有遗漏、破坏或者修改过。一般来说,目前流行的做法是对数据进行hash, 得到的hash值和数据一起传输,然后在收到数据的时候也对数据进行hash,将得到的hash值和传输过来的hash值进行比对, 如果是不一样的,说明数据已经被修改过;如果是一样的,则说明极有可能是完整的。

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

身份验证

身份验证说的是,判断一个人或者机器是不是就是你想要联系的。也就是说如果A想要和B通信,一般来说开始的时候会交换一些数据, A怎么可以判断发送回来的数据就真的是B发送的呢?现实中有很多方法可以假冒一个机器。

在SSH里面,这主要是通过公钥来完成的。首先客户端会有一个公钥列表,保存的是它信任的机器上面的公钥。 在开始SSH连接之后,服务器会发送过来一个公钥,然后客户端就会进行查找,如果这个公钥在这个列表里面,就说明这个机器是真的服务器。

当然实际的情况会复杂一些。实际上服务器不是真的发送公钥过来,因为这很容易被第三方盗取。

02 免密码登录

1、在自己的操作系统上生成一对SSH KEY,如果已经存在可以不生成。

2、将公钥上传到服务器上。

生成SSH密钥和公钥

ssh-keygen -t rsa

这样会在当前目录生成名为id_rsa的私钥文件和名为id_rsa.pub的公钥文件,-t表示密钥类型是rsa。 如果你只输入ssh-keygen生成的RSA密钥长度为2048,如果你对安全性要求比较高可以指定4096位的长度:

ssh-keygen -b 4096 -t rsa

这里-b就是多少位,当然你对这些参数感兴趣可以使用--help参数看看具体的含义和解释。

当你在生成SSHKEY的时候在命令行下会提示你Enter file in which to save the key,让你确认密钥文件保存的路径, 一般回车即可(一般默认会在当前用户家目录下的.ssh目录下)。

第二个提示是 Enter passphrase (empty for no passphrase) 让你输入一个密钥的密码,如果不输入则留空;回车生成公私钥完毕 :) 此时你可以使用cat命令看下自己的公私钥。

服务器配置

我们前面在自己的操作系统生成了公私钥,然后将公钥的内容告诉给服务器就可以了,让服务器知道自己公钥的操作方式还蛮多的。

上传公钥文件

将本地的公钥文件上传到服务器上,然后在服务器需要免密登录的用户家目录下查看是否有 ~/.ssh/authorized_keys 这个文件, 如果没有手动创建一个:

touch ~/.ssh/authorized_keys

然后我们将公钥内容写入到authorized_keys文件中,因为这个文件可能已经有内容了,所以你可以使用如下方式

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

这样就将公钥内容追加到authorized_keys中了,然后需要注意配置权限了,否则SSH不会工作的,我在这里踩了坑。。

  1. 将.ssh目录的权限为700
  1. 将authorized_keys目录的权限为600

ssh-copy-id 复制公钥

这个工具还蛮有用的,不过它会将我本地的所有公钥都传到服务器,使用方法:

ssh-copy-id username@remote-server

因为我的服务器SSH端口不是22,所以使用 ssh-copy-id 登录用户@服务器IP -p端口

**03 试试运用 **

我们完成了这些步骤是不是就可以免密登录了呢?是的,你现在登录服务器:

ssh user@host -p22

注意修改你自己的登录信息。

再简单一点

我们前面生成SSHKEY的时候还有一个私钥没用到,这是干什么用的呢? 公钥是公开的,任何人都可以获得,私钥则是保密的,只有本地存储了一份,

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

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

这里的 Host 是我们要登录的服务器的别名,为了方便快捷登录,下面是服务器的信息,最后一项是你的私钥路径。

完成这个配置后我们就可以使用 ssh yourserver,进行登录啦~

Github添加公钥

我经常会用到Github提交,拉取代码,总不能每次都输入用户名和密码吧。。 于是在Github上添加我自己的公钥即可

image

配置完成后从你自己仓库的提交、拉取等操作就不用再输密码了。

04 常见问题

ssh key Key is invalid

密钥错误,或者配置错误

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

在github上添加新key时,没有正确拷贝 ~/.ssh/id_rsa.pub 内容所致。 一般发生在linux下,因为windows下用 notepa++ 打开这个文件并复制一般是没有问题的, 而linux下使用vim打开再复制就会因为vim添加了回车而导致key添加失败。

解决办法是:使用cat命令将 ~/.ssh/id_rsa.pub 内容输出到终端,再拷贝。

参考资料:

猜你有话说

欢迎你在留言区和我分享你的想法,让我们一同探讨提高。小乐期待你的分享!

image

猜你还想看

阿里、腾讯、百度、华为、京东最新面试题汇集

设计和实现一款轻量级的爬虫框架

红黑树插入算法实现原理分析

如何通俗理解设计模式及其思想!

搜索引擎:该如何设计你的倒排索引?

这里有技术心得算法职场感悟面经,做一个有趣的帮助程序员成长的公众号。看完本文有收获?请转发分享给更多人。
PS:如何您想进技术群交流,关注公众号在后台回复 “加群”,或者 “学习” 即可。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269