吴旭华 发表于 2025-3-8 11:47:18

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
https://i-blog.csdnimg.cn/direct/9e9b54b42e724b5a86a036f91c613202.png
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指令,如果不需要输入密码就能登录则代表乐成了
sshplanck@192.168.0.20 方法2,进入到被登录的机器中,执行下方指令,查看是否有我们刚发生的公钥即可
cat /root/.ssh/authorized_keys https://i-blog.csdnimg.cn/direct/4ff7eb2c8e5347bdb35ab2f73f6aba6d.png
五、多机免密登陆一台设备
  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|-?: 显示帮助


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Linux安全之SSH密钥创建及密钥登陆