您的位置 首页 golang

注意HOME目录权限,避免ssh免密登陆出现问题

0x00 打通本机到服务器的免密登陆

下面的操作使用的是root用户,先将 server 端的/etc/ ssh /sshd_config配置中PermitRootLogin改为yes. 然后service sshd restart生效.

在client端,使用ssh命令进行登录. 这个时候会让我们输入密码.

使用ssh-copy-id可以打通到服务器的免密登陆通道.

直接使用如下ssh-copy-id命令

ssh-copy-id root@server的ip
 

会提示输入一次server的密码.并提示打通完成

再次ssh登陆就不会要求输入密码了,直接就登录上去了.

需要注意的事情:

1.如果使用xshell,mobaxterm之类有 记住服务器密码 功能的软件,可能发现登录登录成功之后就不用再输入密码也可以直接登录了,但是这相当于软件给你输入了密码,不是免密登陆.

2.ssh-copy-id可能会提示找不到~/.ssh/id_rsa.pub文件,此时需先使用ssh-kengen命令生成密匙对.

0x01 ssh免密登陆是怎么工作的

实际上,ssh-copy-id干的事情是把client端的~/.ssh/id_ras.pub这个公钥复制到server端的~/.ssh/authorized_keys文件中.

当ssh登录server的时候,client端的ssh会用私钥~/.ssh/id_rsa对一个数字进行加密,server端的sshd会用自己~/.ssh/authorized_keys中的每一个公钥进行解密,只要有任何一个可以成功解密,那么就免密登陆了.

下面是ssh-copy-id复制到server端~/.ssh/authorized_keys中相应的行

下面是client端id_rsa.pub的值. 可以看到两个是一样的.

也就是说,打通免密登陆,不一定要使用ssh-copy-id命令,把自己的id_rsa.pub内容通过任何方式弄到server端~/.ssh/authorized_keys文件中即可.比如让其他已经登陆的人帮忙复制将内容添加到~/.ssh/authorized_keys文件中. 更特别的,可以把能登录的id_rsa放到自己的.ssh/目录下面(当然要注意文件权限)

0x02 为什么我的免密通道登陆不行了?

一天我发现自己昨天还能免密登陆的服务器突然不能免密登陆了.又是每次登录都需要我输入密码.而且我重新跑了ssh-copy-id还是不行.本来是想通过/ var /log/ messages 查看日志,但是机器的syslog-ng没有开启.导致无法通过查看sshd的日志定位问题.

0x03 打开sshd的调试模式进行问题定位

机器本身的配置我不能修改,也不能随便重启线上服务. 想到了sshd默认用了22端口,但是sshd不是一定要开在22端口,我可以再启动一个不使用22端口的sshd进程,并且开启它的调试模式,直接看日志报错是什么.

在server上,先尝试使用下面的命令直接开启.但是提示sshd只能使用绝对路径开启

sshd -d -p 222
 

换成绝对路径. 其中-d表示开启debug模式,-p 2222表示指定监听端口为2222,因为没有使用-D(daemon模式),进程会在前台执行,日志直接输出.

/usr/sbin/sshd -d -p 2222
 

使用 netstat 确定sshd确实开启了2222端口.

netstat -ntlp |grep sshd
 

在client端使用如下命令登录,其中-p 2222表示连接机器2222端口

可以看到server端sshd进程输出了如下日志,提示/root目录权限不对

使用stat命令确定/root目录的权限是777,需要是700.

server端chmod 700 /root

client的免密登陆恢复了.

原来是因为自己的一个自动化脚本中错误将/root目录的权限修改导致的.

0xFF 总结

打开ssh免密登陆可以方便自动化脚本执行. 但是需要特别注意$HOME/.ssh目录以及这个目录中的文件权限,如果文件权限不对,那么ssh免密登陆会失效.

如果免密登陆出现问题了,可以通过sshd在其他端口开启调试模式的进程.很快就能定位到是什么问题导致免密登陆失效.

文章来源:智云一二三科技

文章标题:注意HOME目录权限,避免ssh免密登陆出现问题

文章地址:https://www.zhihuclub.com/98265.shtml

关于作者: 智云科技

热门文章

网站地图