Linux安全之SSH密钥创建及密钥登陆

主机一对秘钥实现一对多和多对一免密登陆

一、环境准备

1、 虚拟机A (登陆端) :192.168.0.10

2、 虚拟机B(被登陆端):192.168.0.20

3、 虚拟机C (被登陆端) :192.168.0.30

4、 Windows 主机 Xshell 工具

二、实现的功能

1、 Xshell 工具密钥 连接虚拟机 A

1、虚拟机A免密登陆到虚拟机B拷贝文件

三、在虚拟机A上创建秘钥文件夹

1、新建秘钥按照如下路径使用 mkdir 创建文件夹:

root用户密钥 /root/.ssh

普通用户(nonagon)秘钥 /home/nonagon/.ssh

2、创建完成后使用 ls -a 命令查看是否创建成功

四、在虚拟机A上执行以下操作

1、使用 cd 命令进入新建的文件夹,执行ssh-keygen命令创建密钥对

|------------------------------------------------------------------------------|
| cd /home/nonagon/.ssh ssh-keygen -t rsa -C "备注" -b 4096 ##再执行回车,连点三次 |

注意:备注填写"当前主机名+ip",这样做的目的是,当被登录主机有多个公钥,可以通过备注识别是哪台主机的公钥

说明: -b 代表秘钥长度,可以省略成 ssh-keygen -t rsa

4、秘钥生成后,会在 /.ssh文件夹中生成两个文件,

id_rsa 是私钥 (用于外部工具通过ssh登陆服务器)

id_rsa.pub 是公钥 (用于登陆到其他被登陆服务器)

5、将A机器的公钥文件传出给B机器

|------------------------------------------------------------------------------------------|
| ##35000为远程登录端口号,如果使用默认的22端口需要删掉-p 35000 ssh-copy-id planck@192.168.0.20 -p 35000 |

此刻A登陆B已完成

6、将A机器的公钥文件传给C机器

|------------------------------------------------------------------------------------------|
| ##35000为远程登录端口号,如果使用默认的22端口需要删掉-p 35000 ssh-copy-id planck@192.168.0.30 -p 35000 |

此刻A登陆C已完成

7.验证是否成功

方法一:通过下方的ssh指令,如果不需要输入密码就能登录则代表成功了

|----------------------------------|
| ssh planck@192.168.0.20 |

方法2,进入到被登录的机器中,执行下方指令,查看是否有我们刚发生的公钥即可

|----------------------------------------|
| cat /root/.ssh/authorized_keys |

五、多机免密登陆一台设备

A机器和B机器实现免密登陆C

在B机器上重复A机器的生成秘钥操作(第三和第四步操作),然后将B机器的公钥文件传给C机器

主机使用多对秘钥分别免密登陆不同设备

生成多个密钥时需要使用 -f 指定密钥名称

ssh-keygen -t rsa -C "被连接主机的备注" -f ~/.ssh/hostB_id_rsa

ssh-keygen -t rsa -C "被连接主机的备注" -f ~/.ssh/hostC_id_rsa

需要控制N台机器,此时你会生成多对密钥),则需要使用参数-i指定私钥文件

ssh root@172.24.253.2 -i /path/to/your_id_rsa

scp也是一样,如:

scp -i /root/.ssh/id_rsa ./xxx 192.168.102.158:/home/wwy/bak

因为默认情况下ssh命令会使用~/.ssh/id_rsa作为私钥文件进行登录,如果需要连接多台服务器而又不希望每次使用ssh命令时指定私钥文件,可以在ssh的客户端全局配置文件/etc/ssh/ssh_config(或本地配置文件~/.ssh/config, 如果该文件不存在则建立一份)中增加如下配置

IdentityFile /path/to/your_id_rsa.

也可以为每个服务器指定一个Host配置:

Host 172.24.253.2

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ssh-keygen可用的参数选项有: -a trials 在使用 -T 对 DH-GEX 候选素数进行安全筛选时需要执行的基本测试数量。 -B 显示指定的公钥/私钥文件的 bubblebabble 摘要。 -b bits 指定密钥长度。对于RSA密钥,最小要求768位,默认是2048位。DSA密钥必须恰好是1024位(FIPS 186-2 标准的要求)。 -C comment 提供一个新注释 -c 要求修改私钥和公钥文件中的注释。本选项只支持 RSA1 密钥。 程序将提示输入私钥文件名、密语(如果存在)、新注释。 -D reader 下载存储在智能卡 reader 里的 RSA 公钥。 -e 读取OpenSSH的私钥或公钥文件,并以 RFC 4716 SSH 公钥文件格式在 stdout 上显示出来。 该选项能够为多种商业版本的 SSH 输出密钥。 -F hostname 在 known_hosts 文件中搜索指定的 hostname ,并列出所有的匹配项。 这个选项主要用于查找散列过的主机名/ip地址,还可以和 -H 选项联用打印找到的公钥的散列值。 -f filename 指定密钥文件名。 -G output_file 为 DH-GEX 产生候选素数。这些素数必须在使用之前使用 -T 选项进行安全筛选。 -g 在使用 -r 打印指纹资源记录的时候使用通用的 DNS 格式。 -H 对 known_hosts 文件进行散列计算。这将把文件中的所有主机名/ip地址替换为相应的散列值。 原来文件的内容将会添加一个".old"后缀后保存。这些散列值只能被 ssh 和 sshd 使用。 这个选项不会修改已经经过散列的主机名/ip地址,因此可以在部分公钥已经散列过的文件上安全使用。 -i 读取未加密的SSH-2兼容的私钥/公钥文件,然后在 stdout 显示OpenSSH兼容的私钥/公钥。 该选项主要用于从多种商业版本的SSH中导入密钥。 -l 显示公钥文件的指纹数据。它也支持 RSA1 的私钥。 对于RSA和DSA密钥,将会寻找对应的公钥文件,然后显示其指纹数据。 -M memory 指定在生成 DH-GEXS 候选素数的时候最大内存用量(MB)。 -N new_passphrase 提供一个新的密语。 -P passphrase 提供(旧)密语。 -p 要求改变某私钥文件的密语而不重建私钥。程序将提示输入私钥文件名、原来的密语、以及两次输入新密语。 -q 安静模式。用于在 /etc/rc 中创建新密钥的时候。 -R hostname 从 known_hosts 文件中删除所有属于 hostname 的密钥。 这个选项主要用于删除经过散列的主机(参见 -H 选项)的密钥。 -r hostname 打印名为 hostname 的公钥文件的 SSHFP 指纹资源记录。 -S start 指定在生成 DH-GEX 候选模数时的起始点(16进制)。 -T output_file 测试 Diffie-Hellman group exchange 候选素数(由 -G 选项生成)的安全性。 -t type 指定要创建的密钥类型。可以使用:"rsa1"(SSH-1) "rsa"(SSH-2) "dsa"(SSH-2) -U reader 把现存的RSA私钥上传到智能卡 reader -v 详细模式。ssh-keygen 将会输出处理过程的详细调试信息。常用于调试模数的产生过程。 重复使用多个 -v 选项将会增加信息的详细程度(最大3次)。 -W generator 指定在为 DH-GEX 测试候选模数时想要使用的 generator -y 读取OpenSSH专有格式的公钥文件,并将OpenSSH公钥显示在 stdout 上。 |

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ssh-copy-id的参数有: -i #指定密钥文件 -p #指定端口,默认端口号是22 -o <ssh -o options> user@]hostname #用户名@主机名 -f: force mode -- copy keys without trying to check if they are already installed -n: dry run -- no keys are actually copied -h|-?: 显示帮助 |

相关推荐
小张快跑。17 分钟前
服务器限制某个端口只允许特定IP访问(处理第三方依赖漏洞)
运维·服务器·网络协议·安全·docker
feilieren22 分钟前
Linux 中 sftp 命令基本使用
linux·运维·github
日落ོ࿆ྂ23 分钟前
利用 0day 双杀-java 环境-宏感染-安卓客户端渗透
后端·安全·web安全·网络安全
朝九晚五ฺ36 分钟前
【Linux探索学习】第二十一弹——文件描述符和输出重定向:深入解析Linux操作系统中的文件描述符与输出重定向的底层机制
linux·运维·学习
想和我重名?38 分钟前
Linux下的守护程序
linux·运维
Olrookie1 小时前
从源码构建安装Landoop kafka-connect-ui
大数据·linux·后端·kafka
逆天小北鼻2 小时前
oracle client linux服务器安装教程
linux·服务器·oracle
人工智能有点2 小时前
Linux中的service命令
linux·服务器·ubuntu·docker
天空之外1363 小时前
docker离线安装、linux 安装docker
linux·docker·容器