随记--SSH 免密操作实践(认证登录)

基本操作

环境:主机A root 用户 ;主机B root 用户 ;两主机都是A云的,CentOS 7.3

目标

主机A 通过SSH 连接主机B 无需输入密码,即通过SSH 的秘钥进行认证登录

简单流程

  • 生成秘钥
# 一路enter
ssh-keygen -t rsa -C 'test ssh 无密码登录'
  • 传输公钥到目标服务器,这里即主机B
# -i 指定公钥文件
ssh-copy-id -i ~/.ssh/id_rsa.pub root@[主机B的IP 地址]
# 执行完后会提示 让你测试ssh 例如 ssh 'root@[主机B的IP 地址]'
# 本次测试人品爆发了,直接执行  ssh 'root@[主机B的IP 地址]',一次成功了

来点不一样的

复杂秘钥

# -f 指定生成的文件及位置 -b 指定生成的秘钥长度 -t 加密规则 -C 描述性内容
ssh-keygen -f ~/.ssh/test_unpass_login -b 4096 -t rsa -C 'test ssh 无密码登录'

此时通过 ssh-copy-id 传输秘钥之后,测试SSH 会让我输入密码,不想输入密码啊(如果输入密码,我还折腾这一通,写这篇文章干嘛!睡觉它不香吗?!)
怎么办?修改了秘钥文件名称,那就要指定秘钥文件名称,这里包括路径也是可以修改的,不再赘述

# ssh 连接时 通过-i 指定秘钥
ssh -i ~/.ssh/test_unpass_login 'root@[主机B的IP 地址]'

-i 可以解决问题,但是不方便怎么办呢?!config,主机A 通过配制config 文件解决这个问题
config[1] [2] 内容如下:

Host test_ssh_unpass
        HostName        [主机B的IP 地址]
        Port            22
        User            root
        IdentityFile    ~/.ssh/test_unpass_login

然后就可以通过如下命令进行访问:

# 等价于 ssh -i ~/.ssh/test_unpass_login -p 22 'root@[主机B的IP 地址]'
ssh test_ssh_unpass

Root 太危险?

root 用户太危险?怎么办?不用root 用户,创建新用户 主机A 创建ha,主机B创建hb [3]
组合拳

  • 生成秘钥
  • 传输秘钥
ssh-keygen -f ~/.ssh/test_unpass_login -b 4096 -t rsa -C 'test ssh 无密码登录'
ssh-copy-id -i ~/.ssh/test_unpass_login.pub hb@[主机B的IP 地址]

这样就可以不使用root 用户登录了?No, ssh-copy-id 传输秘钥这一步,你改成root@ip 试试。通过ssh -i 的方式还是可以使用主机B 的root 用户登录的,肿么办?还是config,不过此config不是彼config,config 文件区分客户端和服务端,之前的config 是客户端,这次要改的是服务端,因为主机B 在这里充当的就是SSH 的服务端的角色。

主机B sshd_config

# 改完不要忘记重启ssh 服务 service sshd restart
PermitRootLogin no
AllowUsers hb

其它不再赘述,来三张机票[4] [5] [6]


到此结  DragonFangQy 2020.4.24


  1. ssh配置config文件 ↩

  2. SSH Config File ↩

  3. CentOS 7中添加一个新用户并授权 ↩

  4. sshd_config 中 PermitRootLogin 的探讨 ↩

  5. Centos 安全配置之 修改sshd配置文件 ↩

  6. sshd_config - SSH Server Configuration ↩

你可能感兴趣的:(随记--SSH 免密操作实践(认证登录))