在自动化运维管理和统一管理都离不开linux的免密钥登录。此操作在实际运营中很重要。
假设有两台主机 A,B;现使 A登录B时免密。
/root/.ssh/authorized_keys
, 需要自行创建文件夹。利用ssh协议可以达到免密登录的效果。
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
ssh-keygen ssh密钥生成器; -t 指定加密算法; -P '' 指定密钥对,为空表示默认; -f:私钥存放位置
生成密钥对后,返回的结果中包含了密钥的存放位置:
/root/.ssh/id_rsa
;/root/.ssh/id_rsa.pub
;输出结果:
ssh-copy-id -i /root/.ssh/id_rsa.pub root@<target machine hostname or ip address>
根据步骤输入目标主机密码后若得到:
Number of key(s) added: 1
表示当前主机公钥已发送给目标主机,我们可以在目标主机的/root/.ssh/authorized_keys
目录下查看到。
由于达成登录目标主机免密钥的关键是将自己的公钥文件传送给对方,因此通过scp等文件传输指令或者管理员直接用U盘拷贝过去也一样起作用。
ssh root@<target machine hostname or ip address>
eg:
ssh root@CentOS7.testbench
ssh root@192.168.140.100
登陆成功:
问题: 在从CentOS 将公钥传送给 ubutnu server时出现拒绝登录root用户的情况。 解决方案: 此时可以将公钥文件传送给ubantu server的普通用户,再通过登录 ubuntu server的root用户将公钥文件移动到指定位置并重命名为
authorzed_keys
即可。
通过指令 exit
推出登录
在第一次用ssh链接主机时,会出现需要输入yes的手动确认环节如下图:
此行信息由本地SSH客户端发出,上方还有关于目标主机的一些身份信息,这个过程被称为主机验证。
此操作会中断一些自动化运维管理的脚本,所以为了解决这个问题,我们需要关闭这个环节。
OpenSSH为了确认用户确实链接到自己想要链接的主机上,它通过通知用户主机相关信息并询问用户是否连接的方式来完成这个确认工作。
当用户输入‘yes’后,ssh客户端将目标主机的主机名与公钥将会被记录(保存在本地当前登录用户的家目录.ssh/known_hosts
文件中)。下次再链接到此目标主机SSH客户端就会认出它并跳过警告环节进入身份认证的环节(输入密码或验证密钥对)。
ssh -v -o GSSAPIAuthentication=no <username>@<hostname>
/etc/ssh/ssh_config
这是OpenSSH的全局配置文件StrictHostKeyChecking no
, UserKnownHostsFile /dev/null
效果如下图:
当ssh使用 hostname 访问目标主机时,必须在当前主机的hosts文件中添加 域名到ip的对应关系。
本文章使用limfx的vscode插件快速发布