如何用SSH免密登陆Linux &【如何在小组“激网”】

前言

可能很多人在小组都发生过“网掉了”,然后弹出这样的页面:

网掉了

学校的网。。。让学弟学妹们记住用户名和密码也很麻烦,所以我们当然是写个脚本 自动化处理。

本文主要整理一下之前踩过的坑,顺便也是方便小组之后(如果网络还和现在一样)的学弟学妹们,有些坑留下文字记录总比一代代口述方便。。。

正文

还记得我们在 大牛之路第一步的github部分讲到的 不用输入用户名和密码 就从本地push到github的操作吗?把本地代码更改到远端,这里肯定是需要身份验证,那么为什么就不用了呢?
让我们先把这个问题记住。回到标题的免密登陆Linux

Linux“源起”Unix,在那个年代,不是每个人都能使用计算机,那时候更多是多人使用一台计算机,那时候出生的Unix正是多用户操作系统,Linux也一样,你现在用的Linux,只要知道用户名和密码和IP,旁边的小伙伴也可以登陆到你的电脑,和你完全一样的使用你的电脑(当然还是有部分不同,图形界面用不了)。

那么如何登陆呢?
使用telnet或者SSH都可以,这里我们主要说SSH,因为它更安全

保证对方主机22端口畅通,然后在本地
$ ssh user@192.168.30.2
再输入user用户的密码,就可以用user用户的身份登陆到IP地址为192.168.30.2主机上了,然后你该ls,cp都可以啦,就和你自己的电脑一样了。

对于我们的云主机,或者小伙伴的电脑,既然都这么熟了。每次还要输入密码,多麻烦呀,我们希望免密登陆

既然能免去密码验证,说明我们信任登陆者的身份,那么如何做到身份认证(即登陆者就是我们相信的那个人)呢?如同github的push一样,我们都需要身份认证

步骤

我们先不讲原理,只说步骤。
我们将需要免密登陆的主机(如云主机、小伙伴的电脑)叫做Server,我们自己的电脑叫Client。

首先在Server上将SSH需要的22端口打开,或者说启动服务?
在fedora上(redhat系)

开启 $ sudo systemctl start sshd
关闭 $ sudo systemctl stop sshd

或者

$ sudo service sshd start
$ sudo service sshd stop (应该是旧版本的操作。。)

然后用
$ ssh-keygen -t rsa(感谢阿鑫的提醒。。这里第一次手误多加了一个横线)
生成公私密钥,注意这里我们使用了最简单的方法创建,即,输入命令后多按几次回车

生成的公私密钥默认在 ~/.ssh 我们进入这个目录,新建一个文件
文件名必须为authorized_keys 文件权限必须644


重点!!!

文件权限必须符合,当初踩的坑就是因为文件权限导致死活达不到免密登陆!!!

操作步骤和结果如下

然后在Client端通过ssh-keygen 命令生成公私密钥,再将公钥(id_rsa.pub)中的内容添加到Server的authorized_keys文件里就好了。

现在可以免密登陆了。

结果

简单说说原理

前面的操作主要是生成了公私密钥,这叫做非对称加密,即通过公钥利用指定算法加密的内容,只能利用私钥通过指定算法解密。私钥同理。

并且,公钥和私钥一一对应,所以我们在Server端记录了Client的公钥,在Client登陆时,通过SSH协议,Server知道了Client有和自己authorized_keys里面的公钥对应的私钥,也就是自己能信任的人,所以就免去密码登陆了。

github也是这样,我们在github上记录了自己主机的公钥,这样,push时github验证了用户的身份,就不用再输入用户名和密码了。

(这里说的非常简单,感兴趣的同学可以搜索非对称加密对称加密RSAHTTPSSSH等关键字详细了解)

私货 —— 如何在小组“激网”

我们的主机内网IP是192.168.30.2

所以大家只要

$ ssh net@192.168.30.2 //第一次登陆 密码同wifi密码
$ ./connect.sh         //登陆脚本早就写好了

就可以了,当然,你得先设置免密登陆。

将自己的公钥文件转换个名字传到net用户的home下
这里不转换名字会把自己的id_rsa.pub覆盖掉net的id_rsa.pub!!!

这也是我当初踩的坑。。。。root的id_rsa.pub就是这么没的。。。

首先在本地操作,把把本地的公钥文件传送的我们的目标主机(30.2)上,这里使用的scp来进行传输


$ cd kang/.ssh/       //进入用户目录下的.ssh目录     
$ cp id_rsa.pub kang   // 将公钥文件复制一份,注意我这里把复制后的文件改名了,因为一会我们要把它传到/home/net/.ssh/目录下那里也有一个id_rsa.pub ,防止被覆盖
$ scp kang net@192.168.30.2:/home/net/.ssh //这里需要在输入一次net的密码(wifi密码)

然后再登陆

$ ssh net@192.168.30.2         //在输入一次net密码(wifi密码)
$ cd .ssh
$ cat kang >> authorized_keys  //注意是两个尖括号

注意是两个尖括号,是追加到文件而不是重写文件!!!

我的操作

每次都要ssh这么长一个命令也很麻烦,在~/.bashrc里添加你的命令,如

alias sshgroup='ssh net@192.168.30.2'

再用

source ~/.bashrc

让它生效,每次激网都很方便啦。


PS:在执行脚本connect.sh时,程序并不会自动退出,所以出现login successful 就可以ctrl+c终止掉了,当然有时候程序会只打印get cookie,网也已经好了,ctrl + c 掉就行了。

感谢陈森同学的热心指正,大家发现我的博客有什么错误或者描述不清楚,不明白的地方都可以指出来,这样我也能进步啦!


.ssh和authorized_keys的目录权限中的g和o都不能含有2 ,也就是不能给写权限,这给写权限直接就坑爹了,原因自己想。网上一般都推荐600。这里我做了实验!744也可以!

FIN

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值