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

多台虚拟机免密登录ssh linux中多台主机ssh远程免密登录;删除原来免密生成的命令重新进行免密登录。 更改 host和ip的绑定。 阅读详情

欢迎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

  2. 将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:如何您想进技术群交流,关注公众号在后台回复 “加群”,或者 “学习” 即可。

关注「程序员小乐」,收看更多精彩内容
关注公众号「程序员小乐」,收看更多精彩内容

ssh免密登录 的字符串以后,使⽤⾃⼰本地存储的私钥进⾏解密操作(得到itcast)第五步:把解密得到的itcast发送到B主机,然后验证与刚才⽣成的字符串是否⼀致,如果⼀。③ 在RealServer服务器端,把id_rsa.pub⽂件中的内容追加到~/.ssh/authorized_keys⽂件中。② 使⽤ssh-copy-id把公钥⽂件中的内容传输到服务器端的~/.ssh/authorized_keys⽂件中。上进⾏公钥⽐对(判断A主机的公钥是否已经存储在B主机的authorized_keys⽂件中),如果。 阅读详情

相关推荐

ssh免密登录详细设置

ssh免密登录详细设置

Eric Ray的博客 5800

SSH远程免密登录的两种方式

ssh免密登录看这里就够了

初心不忘、始终方得 3万+

Linux取证——SSH免密登录

通过SSH实验远程登陆有两种方式:口令登录和公钥登录。本文将从这两种登陆方式的原理展开来讲解如何实现SSH免密登录服务器。

记录并分享学习安全的知识点.. 2343

SSH配置免密登录

SSH(Secure Shell)是一种加密的网络协议,广泛用于远程管理服务器和安全传输文件。通常在使用SSH时需要输入密码进行验证,但通过配置免密登录,我们可以省去每次输入密码的麻烦。

jakelihua 4万+

SSH免密登录

在一些场景下,可以设置 SSH(Secure Shell)免密登录,这样就可以在不输入密码的情况下登录到服务器。在本地机器上生成一个新的 SSH 密钥对,如果您还没有的话。使用ssh-keygen按照提示操作,您可以为密钥设置密码(这是一个额外的安全措施),或者直接按回车键接受默认设置。

大大怪将军,你来啦! 8987

ssh 实现免密码登陆

实现ssh 免登陆

日积月累 5265

ssh免密码登录3种解决方法

前言 如果需要远程管理几个ssh服务器,输入不输入密码都无所谓,甚至都能背下来密码。当你要管理的ssh 多达几十个时,就不想输入密码啦。这里只是记录本人的使用习惯,不一定是最佳解决方案。 方式一:专门的ssh软件自带记住密码功能 这类的软件有很多,我使过很多款,下面两款值得推荐。 xshell windows下推荐使用 下载地址: https://www.netsarang.com/zh/free-for-home-school/ 推荐理由: 个人版本免费使用 功能强大,操作简单 中文界面 不足之处:

lxyoucan的博客 7208

SSH免密登录是怎么玩儿?

 SSH免密登录是怎么玩儿? 王爵nice 15 天前 作为一名后端开发,经常会遇到SSH登录,Git提交等事务,而当你有很多服务器的时候使用密码可能不是一个好的选择了, 就像我要登录自己的服务器、公司各个环境的服务器,虽然有工具可以帮我们做这些,但我习惯在命令行下操作。 下面我带你了解一下免密登录的原理和如何实现。 基本概念 SSH协议 SSH 是一种计算机之间加

java_2017_csdn的博客 951

SSH免密登录配置

SSH无密登录配置

zhaozhao121a的博客 5万+

SSH免密登录原理

大数据集群中ssh免密登录原理

ZJ_comeon的博客 6078

Linux SSH 免密登录

Linux SSH 免密登录 本篇我们来 看看 Linux 的免密登录的原理 以及实际操作一番 概述 什么是 Linux SSH 免密登录,我觉得大家应该都 多少听过 或者操作过,那你真的理解整个免密登录的过程吗? Linux SSH 免密登录 就是 可以不输入密码 就可以通过SSH 远程连接到 服务器了 1.SSH 免密登录原理 通过上面的图解流程 可以大致分为下面几步,A 作为Client端 B作为 Server端 A -> B A免密登录B 在A上生成公钥私钥。 将公钥拷贝给

qq_34285557的博客 8839

如何设置SSH免密登录,只需两步(小白也能学会)

把本地的ssh公钥文件安装到远程主机对应的账户下,ssh-copy-id命令 可以把本地主机的公钥复制到远程主机的authorized_keys文件上,ssh-copy-id命令也会给远程主机的用户主目录(home)和~/.ssh, 和~/.ssh/authorized_keys设置合适的权限。ssh-copy-id 命令可以把本地主机的公钥复制到远程主机的 authorized_keys 文件上。authorized_keys 文件用来验证 client。

可乐要加冰!!! 1万+

SSH密钥认证:实现远程服务器免密登录的两种方法|Linux scp命令详解:高效实现文件与目录的远程传输

SSH密钥认证:实现远程服务器免密登录的两种方法|Linux scp命令详解:高效实现文件与目录的远程传输

丨汀、的博客 4711

Linux 配置免密登录,以及什么是免密登录免密登录就不需要密码吗?

Linux 配置免密登录 一 为什么可以免密登录? 首先来说公钥和私钥(有好多东西是国外翻译过来比较拗口,不利于学习,我喜欢先例后概念,或者直接上例子) 比如:有两个用户A和B,A想把一段明文通过双钥加密的技术发送给B(A目前除了明文,还没有公钥,也不会有私钥),B有一对公钥和私钥 那么加密解密的过程如下: B将他的公开密钥传送给A A用B的公开密钥加密他的消息,然后传送给B B用他的私人密钥解密A的消息 首先来说RSA算法 RSA公钥加密算法是1977年由Ron Rivest、Adi Shami

weixin_43558205的博客 1429

SSH服务以及多台服务器怎样实现远程免密登录

远程控制连接(类似于远程桌面)软件名:openssh服务名:sshd配置文件:/etc/ssh客户端:ssh_config服务端:sshd_config格式:ssh 选项 用户@ip地址scp格式:scp 文件地址 目标文件用法:本地------>本地本地------>远程远程------->远程密码:明文密码 例:123456 不安全密钥对:对加密类型非对称加密。

2402_88401132的博客 1485

【Linux】SSH免密登录

我实在是懒得输入密码!

jinx 4019

SSH 免密登录

SSH 免密登录是指使用 SSH 协议连接远程主机时不需要输入密码就可以直接登录。要实现 SSH 免密登录,需要在本地主机上生成一对密钥(公钥和私钥),然后将公钥拷贝到远程主机上。 下面是具体步骤: 在本地主机上打开终端,运行以下命令生成密钥对: ssh-keygen -t rsa 这会在用户主目录的 .ssh 目录下生成两个文件:id_rsa 和 id_rsa.pub。id_rsa 是私钥...

weixin_35757191的博客 3578
上一篇: 一个故事讲完HTTPS
下一篇: 为什么说程序员的前三年不要太看重工资水平?
吧主
博客等级 码龄12年 1242粉丝 116原创
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值