A、B两台Linux终端,其中需要A通过SSH远程登录B时,能够免密码直接通过用户名进行登录的配置介绍 公钥私钥 1、什么是公私钥
- 公钥和私钥成对出现
- 公开的密钥叫公钥,只要自己知道的叫私钥
- 用公钥加密的数据只要对应的私钥能够 解密
- 用私钥加密的数据只要对应的公钥能够解密
- 假如能够用公钥解密,则必定是对应的私钥加的密
- 假如能够用私钥解密,则 必定是对应的公钥加的密
- 用公钥加密数据,用私钥来解密数据
- 用私钥加密数据(数字签名),用公钥来验证数字签名。
SSH (1)客户机向远程主机发送登录请求,并且把自己的公钥发送给远程主机。
(2)远程主机收到用户的登录请求,首先判断对应的用户主目录下是否存在.ssh/authorized_keys并且这个文件中有没有有客户机的公钥时;
如果条件不成立,就会使用账户口令登录登录的方式,同时向客户机返回
- 自己的公钥
- 自己的公钥;
- 客户机公钥加密过的一些验证信息
(3)用户使用这个公钥,将登录密码加密后,发送回来。
(4)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。
基于公私钥登录的方式:(可以实现 免密钥登录)
能用到这种方式的前提是,用户已经将自己的公钥储存在远程主机上,这个是重点,也就是所谓的“公密钥分发”。
(3)用户用自己的私钥解密“随机信息”后,接着用“私钥”加密签名该“随机信息”,最后再用远程主机的公钥加密发送给远程主机。
(4)远程主机先用自己的私钥解密,然后在用事先储存的客户机公钥进行解密认证,得出“随机信息”,如果“随机信息”正确,就证明用户是可信的,直接允许登录shell,不再要求密码。
ssh-copy-id命令解析
- ssh-copy-id命令可以把本地主机的公钥复制到远程主机的authorized_keys文件上
- ssh-copy-id命令也会给远程主机的用户主目录(home)和~/.ssh, 和~/.ssh/authorized_keys设置合适的权限。
达到的功能:
ssh-copy-id - 将你的公共密钥填充到一个远程机器上的authorized_keys文件中。使用模式:
ssh-copy-id [-i [identity_file]] [user@]machine
描述:
ssh-copy-id 是一个实用ssh去登陆到远程服务器的脚本(假设使用一个登陆密码, 因此,密码认证应该被激活直到你已经清理了做了多个身份的使用)。它也能够改变远程用户名的权限,/.ssh和/.ssh/authorized_keys删除群组写的权限(在其它方面,如果远程机上的sshd在它的配置文件中是严格模式的话,这能够阻止你登陆。)。
如果这个 “-i”选项已经给出了,然后这个认证文件(默认是~/.ssh/id_rsa.pub)被使用,不管在你的ssh-agent那里是否有任何密钥。
另外,命令 “ssh-add -L” 提供任何输出,它使用这个输出优先于身份认证文件。如果给出了参数“-i”选项,或者ssh-add不产生输出,然后它使用身份认证文件的内容。一旦它有一个或者多个指纹,它使用ssh将这些指纹填充到远程机~/.ssh/authorized_keys文件中。环境配置 关闭防火墙
- iptables
# 临时关闭
systemctl stop iptables
service iptables stop# 永久关闭
systemctl disable iptables
chkconfig iptables off
- firewalld
# 临时关闭
systemctl stop firewalld.service// 停止firewall# 永久关闭
systemctl disable firewalld.service// 禁止firewall开启启动
firewall-cmd --state// 查看firewall状态
关闭SELinux
安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。
主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。
# 临时关闭(0为关闭,1为开启)
setenforce 0# 永久关闭
修改 /etc/selinux/config 文件
将 SELINUX=enforcing 修改为 disabled
重启生效# 查看状态
getenforce
/usr/sbin/sestatus -v
配置远程权限 如果使用root帐号进行远程登录,需要授权 root 允许远程登录的权限
# 修改 /etc/ssh/sshd_config
PermitRootLogin yes//允许root登录
PermitEmptyPasswords yes //允许不输入密码登录# 重启 sshd 服务生效
systemctl restart sshd
密钥设置 配置SSH权限
# 编辑 /etc/ssh/sshd_config 文件,去掉下面几行的注释 '#'
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile.ssh/authorized_keys# 重启 sshd 服务
systemctl restart sshd
service sshd restart
生成密钥
# 执行命令,三次默认回车
ssh-keygen -t rsa# 生成两个文件
id_rsa: 私钥
id_rsa.pub:公钥
导入公钥 方法一:创建文件并进行拷贝,将公钥导入到另一台终端的认证文件中
cat id_rsa.pub >> ~/.ssh/authorized_keys
设置文件访问权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
方法二:在本机通过
ssh-copy-id
命令直接将公钥分配给目标终端ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.1# 可简写
ssh-copy-id
// 其中在 /etc/hosts中 配置,用户默认为本机运行用户
推荐阅读
- ssh|ssh免密登录配置详解
- 网络|操作系统及linux知识总结——网络篇
- Hadoop|Hadoop集群搭建(二)——Linux系统SSH远程双向免密登陆
- Linux|Ubuntu Linux操作系统——图形界面与命令行
- Linux学习之路|Linux——SSH服务篇与防火墙简单配置
- redhat|远程连接——SSH
- linux|Linux基础篇——Linux网络配置(配置网卡、固定IP,固定hostname,终端远程)详解
- k8s|干货丨如何进行容器管理平台监控(k8s)
- Linux防护与群集|第十章(Mysql主从复制读写分离)