场景:机器A通过sftp免密登录机器B
机器A有用户redis、 nginx, 机器B有用户monitor、 bak用户
需求:机器A在nginx用户环境下,sftp机器B的bak目录
注意:因为sshd为了安全,对属主的目录和文件权限有所要求。如果权限不对,则ssh的免密码登录不生效。
极其重要:被登录的机器(机器B)的家目录/home/bak、.ssh、id_rsa、 id_rsa.pub、authorizied_keys对其他用户不能有w(写)权限,(可使用chmod go-w 目录或文件命令取消写权限),机器A的id_rsa文件权限必须为600, 否则会出错。
参考下面的权限配置即可:
用户目录权限为 755 或者 700,就是不能是77x、777,
.ssh目录权限一般为755或者700。
id_rsa.pub 及authorized_keys权限一般为644
id_rsa权限必须为600
步骤:
1、在机器A操作:切换nginx用户,查看 /home/nginx/.ssh目录是否存在,查看.ssh是否有id_rsa和id_rsa.pub两个文件。如果存在,则跳过这一步,如果不存在,则在机器A运行ssh-keygen -t rsa,将会生成.ssh目录和公钥和私钥两个文件。
2、在机器B操作:切换bak用户,查看/home/bak/是否存在.ssh目录,如果存在,则再查看其他用户对.ssh权限是否有写权限,(注意:只有bak用户才能拥有对.ssh的写权限,否则配置出错)。
如果其他用于对.ssh有写权限,则调整.ssh目录权限为700。
进入.ssh目录,建立authorized_keys文件,并将机器A的id_rsa.pub的内容复制到authorized_keys中。修改chmod 600 authorized_keys的权限为600
3、在机器A的nginx用户下,sftp bak@192.168.74.103测试:
中间输入一次yes就可以了。