linux免密码登录

在测试机上,通过 ssh 登录,需要键入密码,有时候会觉得特别麻烦,测试机无所谓安全,所以有没有“免密码登录”的功能(对于公钥方式的那种免密登录不是本篇文章所涉及的)

可以按照如下步骤进行:
1. vi /etc/ssh/sshd_config

PermitEmptyPasswords yes

也就是允许空密码登录。
2. systemctl restart sshd,然后再登录发现还是需要输入密码。原因是该用户本来就有密码,那么:
3. passwd -d someuser-name,也就是把某个用户的密码删除即可。

本文结束。

root登录linux的时候,报“Permission denied, please try again.”

用root远程登录的时候,用户名和密码都正确,但是报错:Permission denied, please try again.

先说一下,用户登录linux的几种方式:
1. 通过密码方式
2. 通过公钥方式
3. 通过键盘交互方式:登录的时候提示你输入用户名和密码那种方式

需要这么修改:

首先修改 /etc/ssh/sshd_config 中的 PermitRootLogin,这个 PermitRootLogin 有以下几个值可以选择,通过 man sshd_config 可以看到具体哪几个值可以选。

yes:这个是默认值,允许上面3种登录方式。
prohibit-password 和 without-password:这2个是一样的,禁止密码方式、禁止键盘交互方式,只允许公钥方式。
forced-commands-only:可以登录,但是登陆后不能进入交互,而是执行指定的命令后 自动退出,指定的命令在authorized_keys里面列出,例如/bin/date
no:不允许root远程登录

所以,我们设置 PermitRootLogin yes,然后 systemctl restart sshd 即可以解决上面这个问题。

lsmod,modprobe和sysctl的说明

lsmod

我们经常听到linux内核,非常的高大上,内核中包含很多模块组件,构成了整个完整的内核。

如何查看linux装载的内核?很简单,用 lsmod 命令,然后会显示一大堆内核中内含的模块,我们想要看某一个模块有没有,可以用如下的命令,举例:

lsmod | grep ip_tables
ip_tables              27126  2 iptable_filter,iptable_nat

出来3列,这3列的名称我们先用一个例子举出来,然后再来解释:

lsmod | egrep 'Module|ip_tables'
Module                  Size  Used by
ip_tables              27126  2 iptable_filter,iptable_nat

Module: 模块名称
Size: 模块的大小
Used by:第1个数字表示这个模块被其他的几个模块所使用(其实表示了依赖关系),后面的是依赖这个模块的其他模块

modprobe

用来加载和移除模块的命令,比如:

modprobe br_netfilter  #加载
modprobe -r br_netfilter  #移除

sysctl

上面说了加载模块,现在来了问题了,每个模块都有参数需要设定的,那么如何修改这些参数,这些参数又是存储在哪里的,这个就是 sysctl 的作用了。

sysctl 说简单点就是用来修改内核模块参数的,嗯,非常好理解。可以看这篇介绍sysctl的文章:sysctl介绍,基本上该有的都有了,下面是对这篇文章的一些小补充:

  1. 内核模块的参数存储在 /proc/sys 这个目录下面,比如我们修改:
    sysctl -w net.ipv4.ip_forward=1
    那么实际上是 net.ipv4.ip_forward 按照 . 这个句号进行切分,前面的是目录,最后一个是文件,所以这个参数的位置在
    /proc/sys/net/ipv4/ip_forward这个文件中,一个参数一个文件,每个文件就是含有这个参数的值,所以,我们可以直接用下面的命令也是和sysctl一样的作用:
    echo 1 > /proc/sys/net/ipv4/ip_forward
  2. 按照上文中说,sysctl -w net.ipv4.ip_forward=1 中的 -w 是临时的意思,其实不是,w的意思是写到 /proc/sys/net/ipv4/ip_forward 这个文件中。
  3. 当系统重启,或者服务重启后,这个文件中的配置将丢失,为了使得重启后还是生效的,上文中说写在 /etc/sysctl.conf 这个文件中,其实按照标准的做法,应该是在 /etc/sysctl.d/这个目录中增加一个文件,文件名随便,然后将 net.ipv4.ip_forward=1 写在这个文件中。这种模式就好比 nginx 的配置文件一样,也不知道是 nginx 学习 linux 的呢,还是 linux 学习 nginx。这种配置非常合理,大家不用挤在 sysctl.conf 这一个文件中来修改。