一般情况下,我们通过一台 Linux 服务器远程另外一台服务器时,每次远程都需要输入对端机器的密码。
ssh root@192.168.21.20
有没有这样一种情况,我们不用输入密码就可以远程别的服务器呢?
答案是肯定的,如果我们在 Linux 服务器上正确配置了免密码登录,也就是使用用密钥认证代替密码认证,就可以实现不用输入密码就能远程登录到服务器。
免密码登录的需求主要是为了方便、安全和高效。
如果我们在运行自动化脚本或者跑定时任务,并且需要在多台服务器之间传递,免密码登录可以大大提高效率,并减少因密码输入错误导致的问题。
如果我们经常需要在不同的服务器之间部署代码。使用免密码登录可以简化部署流程,并确保部署的连续性和稳定性。
当我们需要频繁地在多台服务器之间切换,对服务器进行维护或管理时,免密码登录可以节省大量时间。
我们准备两台 Linux 主机,实现客户机免密登录远程机。
客户机 192.168.21.10
远程机 192.168.21.20
我们分别用工具远程连上这两台机器,为了方便区分,我们使用两种不同颜色背景的终端。
以下为配置免密码登录的操作步骤,配置完成后,就可以实现免密码远程远程机啦。
免密码登录的实现方式是,首先在客户机生成秘钥对,然后把公钥传给远程机。
其中的原理是,我们将自己的公钥储存在远程主机上。当我们尝试登录时,远程主机会向我们发送一段随机字符串。
我们使用自己的私钥对这个字符串进行加密,并将加密后的结果发送回远程主机。远程主机随后使用事先存储的我们的公钥来尝试解密这个字符串。
如果解密成功,远程主机就会确认我们是可信的,并直接允许我们登录到 shell,无需再输入密码。
我们首先在客户机终端键入以下命令,一路按回车键,生成客户机秘钥对。
ssh-keygen -t rsa
在客户机,我们可以看到在家目录自动创建一个隐藏文件夹 .ssh,并且生成两个文件,分别是私钥文件 id_rsa 和公钥文件 id_rsa.pub 。
ls /root/.ssh
我们可以通过下面三种方法,将公钥文件传到远程机对应的目录。
方法一、通过 ssh-copy-id 传公钥
在客户机键入下面的命令,在应答的位置输入 yes,接着输入远程机的密码,之后就可以免密码登录啦。
如果有多台服务器都需要免密码登录,换一下 IP 地址,重复这个过程就 OK 了。
如果需要两台机器互为免密码登录,那么同样地,在远程机上生成秘钥对,将远程机的公钥文件传到客户机对应的目录。
ssh-copy-id root@192.168.21.20
在远程机,我们会发现,同样在用户家目录创建了一个隐藏文件夹 .ssh,这个目录下面多了一个文件 authorized_keys,这就是刚才传过来的公钥,这样下次客户机远程过来,就不用再输入密码,这种方式在集群中用得比较多。
cd /root/.ssh
ls
方法二、通过 scp 传公钥
客户机生成秘钥对后,通过 scp 把公钥传到远程机,但有个前提是,确保远程机用户家目录存在 .ssh 文件夹。
我们先在远程机创建文件夹,且赋予对应的权限。可以看得出来,这种方法比第一种方法麻烦,建议使用方法一。
mkdir /root/.ssh
chmod 700 /root/.ssh
在没有传公钥过来时,我们观察发现目录下没有任何文件。
cd /root/.ssh/
ls
我们通过 scp 命令把公钥传给远程机,并且把名字改成 authorized_keys,远程机会自动创建名为 authorized_keys 的文件。
传过去之后,我们只需要输入一次对端的密码,以后在客户机远程这台机器,都不需要输入密码。
scp -p id_rsa.pub root@192.168.21.20:/root/.ssh/authorized_keys
把传公钥过来后,我们发现远程机的目录多了一个文件,这就是公钥文件。
cd /root/.ssh/
ls
我们验证一下,在客户机远程到远程机,再也不需要输入烦人的密码。
ssh root@192.168.21.20
方法三、手工拷贝公钥内容
实现服务器间的免密远程,还有一种方法就是把客户机上的公钥拷贝出来,然后把内容放到远程机器的 authorized_keys 文件中。
我们需要在远程机创建一个隐藏目录,给它赋予 700 权限,然后在此目录下新建一个 authorized_keys 文件,把公钥信息写到这个文件,最后务必将该文件授予 600 权限。
mkdir /root/.ssh
chmod 700 /root/.ssh/
vim /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
在客户机先远程一次远程机,键入 yes 后,后续就不用再输入密码就可以远程到对端机器。
ssh root@192.168.21.20
我们仅仅是设置 SSH 免密码登录,就已经用了不少 Linux 命令,可想而知,Linux 命令是有多重要呀。