ssh免密码登录

为什么要做ssh免密码登录?在通过脚本远程部署软件时,经常要多次远程执行命令,免密码登录有助于简化脚本代码,同时提高登录效率。

免密码登录的原理,简而言之,就是将本地用户的公钥,复制到远程主机指定文件中(这一步需要密码);之后的登录,远程主机将通过密钥来识别用户,而不再需要密码。

复制公钥的方法有两种,最简单的就是执行ssh-copy-id命令:

ssh-copy-id remote_user@remote_host

第二种方法就是通过基本命令将公钥写到远程主机的authorized_keys文件中:

key=$(cat ~/.ssh/id_rsa.pub)
ssh remote_user@remote_host "
echo '$key' >> ~/.ssh/authorized_keys;
sort -u ~/.ssh/authorized_keys > ~/.ssh/authorized_keys_tmp;
/bin/mv ~/.ssh/authorized_keys_tmp ~/.ssh/authorized_keys;
"

上面的代码还考虑到了重复写入的问题。据我所知,ssh-copy-id命令多次重复执行会在authorized_keys文件中产生重复的记录,所以执行之前最好先检测一下。


复制完公钥,理想情况下事情已经结束,可以试试ssh登录有没有免密码的效果。如果没有效果,那就是问题来了:

1、检查远程用户的.ssh目录权限是不是755或者600,如果不是,就修改一下权限:

chmod 755 ~/.ssh

2、尝试关闭selinux,如果关了就可以登录,那估计要恢复一下selinux上下文 :

restorecon -Rv ~/.ssh/

收工.

你可能感兴趣的:(linux,ssh)