当前位置:   article > 正文

【Linux】ssh-keygen不需要回车,自动生成密钥,批量免密操作!_生成秘钥免回车

生成秘钥免回车

使用命令ssh-keygen 需要手动敲击回车,才会生成密钥,如下代码所示

  1. [root@localhost ~]# ssh-keygen
  2. Generating public/private rsa key pair.
  3. Enter file in which to save the key (/root/.ssh/id_rsa):
  4. Enter passphrase (empty for no passphrase):
  5. Enter same passphrase again:
  6. Your identification has been saved in /root/.ssh/id_rsa.
  7. Your public key has been saved in /root/.ssh/id_rsa.pub.
  8. The key fingerprint is:
  9. SHA256:liDdKl+uW9TmA++L3uoO99l/mFNRBP77bm/DbDuLHB4 root@localhost.localdomain
  10. The key's randomart image is:
  11. +---[RSA 3072]----+
  12. | .o.|
  13. | . . . .|
  14. | . o . . .|
  15. | . o o o |
  16. | . . S o o|
  17. | o = = o|
  18. | o + + Eo= |
  19. | = = +o B*=|
  20. | o=*.*..=oOX|
  21. +----[SHA256]-----+

但是有些场景,例如shell脚本中,需要自动生成密钥并自动 ssh-copy-id 这样就很麻烦,
其实只需要将需要确认的内容,告知到命令中就不需要再敲回车确认了:

ssh-keygen -t rsa -N '' -f /root/.ssh/id_rsa -q


执行上面的命令,会自动创建root用户的公钥和私钥(具体用户需要修改绝对路径的文件夹)
这样就不需要手动敲击回车了

将密码传输到各个服务器也需要敲击回车,或输入密码,其中有的第一次登陆的服务器需要输出yes
下面一一来解决上面的问题
1、首先解决第一次登陆敲击yes的问题
这是由于~/.ssh/known_hosts 文件中并未记录相关信息,才需要手动敲击yes后才可以到输入密码界面
解决办法:

sed -i '/StrictHostKeyChecking/c StrictHostKeyChecking no' /etc/ssh/ssh_config


执行上面的命令,将StrictHostKeyChecking no这个选项修改为no,不需要确认yes即可。

2、输入密码问题
解决了yes的问题,输入密码也需要手动输入,比较麻烦,不能称之为自动传输,只能称为半自动
下面解决这个问题
两种方法:
第一种:sshpass
第二种:expect
市面上常见的是expect 来自动敲击回车

安装

sudo apt install expect

sudo yum install expect

 

  1. expect <<EOF
  2. spawn ssh-copy-id -i user@host
  3. expect {
  4. "yes/no" { send "yes\n";exp_continue }
  5. "password" { send "${PASSWORD}\n" }
  6. }
  7. expect eof
  8. EOF

这种比较常用
但sshpass这个并不是很常见,下面展开说说
sshpass 非默认安装,需要手动安装
rpm -qa | grep sshpass || yum install sshpass -y
安装完成之后,即可使用sshpass来传输密码
sshpass -p 密码 ssh-copy-id -i 用户@主机ip
这个前提,需要将ssh_config文件下的StrictHostKeyChecking no 修改为关闭状态
否则报错:

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: “/root/.ssh/id_rsa.pub”

最后附上脚本
expect相关(注意不需要修改ssh_config文件下的StrictHostKeyChecking no )

  1. #!/bin/bash
  2. ## 注意下面配置的是网段,并不是完整ip
  3. NET=192.168.100
  4. USER=(root zclinux)
  5. PASSWORD=123456
  6. ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa &> /dev/null
  7. for i in {1..254} ; do
  8. {
  9. expect <<EOF
  10. spawn ssh-copy-id -i ${USER[0]}@${NET}.${i}
  11. expect {
  12. "yes/no" { send "yes\n";exp_continue }
  13. "password" { send "${PASSWORD}\n" }
  14. }
  15. expect eof
  16. EOF
  17. }&
  18. done
  19. wait

sshpass相关脚本

  1. #!/bin/bash
  2. ## 注意下面配置的是网段,并不是完整ip
  3. NET=192.168.100
  4. USER=(root zclinux)
  5. PASSWORD=123456
  6. ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa &> /dev/null
  7. sed -i '/StrictHostKeyChecking/c StrictHostKeyChecking no' /etc/ssh/ssh_config
  8. rpm -q sshpass &> /dev/null || yum -y install sshpass &> /dev/null
  9. for i in {1..254} ; do
  10. {
  11. sshpass -p $PASSWORD ssh-copy-id -i ${USER[0]}@${NET}.${i} &> /dev/null
  12. }&
  13. done
  14. wait




【Linux】ssh-keygen不需要回车,自动生成密钥,批量免密操作!_sshkeygen自动回车-CSDN博客

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号