shell编程——Shell批量下发公钥

登录服务器步骤(从一台linux登录到另外一台linux)

登录服务器需要有两个步骤,一个输入yes、一个输入密码

试想如果有上千台服务器?每台都要输入yes、输入密码

ssh免输入yes,修改/etc/ssh/ssh_config

StrictHostKeyChecking no

ssh免输入密码的实现1

yum install -y epel-release

yum install -y sshpass

sshpass -p "jackin" ssh 192.168.237.131

ssh免输入密码的实现2,通过密钥

生成公钥(锁)、私钥(钥匙),公钥放被登录的服务器上,私钥需要自己保留

ssh-keygen -t rsa

手动把公钥上传到被登录的服务器上,私钥就能进行无密码登录

借助ssh-copy-id来实现公钥上传,需要输入服务器的密码

ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.237.131

sshpass -p 'jackin' ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.237.131 #sshpass自动输入密码

上千台服务器批量下发公钥,配置文件/root/.host

jackin1 192.168.237.128 jackin

jackin2 192.168.237.131 jackinpwd

Shell脚本实现批量下发公钥

OLDIFS=$IFS

IFS=$'\n'

for line in $(cat /root/.host);do

  myip=$(echo $line |awk '{print $2}')

  mypwd=$(echo $line | awk '{print $3}')

  echo "$myip $mypwd"

  sshpass -p $mypwd ssh-copy-id -i /root/.ssh/id_rsa.pub $myip

done

IFS=$OLDIFS

验证是否都能无密码登录

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 批量推送公钥可以通过使用 SSH 的 authorized_keys 文件来实现。下面是一个示例脚本,可以将本地的公钥推送到多个远程主机上: ```bash #!/bin/bash # 设置需要推送的公钥文件路径 pubkey_path=~/.ssh/id_rsa.pub # 读取需要推送的主机列表 read -p "Enter remote hosts (separated by space): " hosts # 读取需要推送的用户 read -p "Enter remote user: " user # 循环遍历主机列表,将公钥复制到 authorized_keys 文件 for host in $hosts; do ssh $user@$host "mkdir -p ~/.ssh && chmod 700 ~/.ssh && touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys && cat >> ~/.ssh/authorized_keys" < $pubkey_path done ``` 在运行脚本时,会提示输入需要推送公钥的远程主机列表和远程用户,然后将本地的公钥文件复制到远程主机的 authorized_keys 文件中。注意,脚本需要在本地已经存在公钥文件,并且需要在远程主机上安装了 SSH 服务。 ### 回答2: 批量推送公钥是一种在多个远程服务器上自动化部署公钥的方法,可以方便地实现无需人工干预的SSH远程登录。 在Shell脚本中,我们可以使用以下的步骤来批量推送公钥: 1. 在脚本中定义一个包含远程服务器IP地址的数组,例如: ``` servers=("192.168.1.101" "192.168.1.102" "192.168.1.103") ``` 2. 使用一个循环结构来遍历数组中的IP地址,并执行以下操作: a. 生成公钥对(如果不存在的话): ``` if [ ! -f ~/.ssh/id_rsa.pub ]; then ssh-keygen -t rsa -q -N '' -f ~/.ssh/id_rsa fi ``` b. 使用ssh-copy-id命令将公钥拷贝到远程服务器: ``` ssh-copy-id user@$server ``` 其中,`user`是远程服务器登录的用户名,`$server`是当前遍历到的IP地址。 3. 将以上代码保存为一个Shell脚本文件(例如`push_keys.sh`),并添加执行权限。 4. 在终端中执行Shell脚本: ``` ./push_keys.sh ``` 这样,脚本将会自动遍历数组中的每个IP地址,生成并推送公钥到对应的远程服务器上。 需要注意的是,在执行ssh-copy-id命令时,可能会提示输入远程服务器的登录密码。为了避免这个问题,可以事先使用SSH Agent来管理私钥,或者在远程服务器上配置免密码登录。 希望以上回答对您有帮助! ### 回答3: Shell脚本批量推送公钥是一种方便快捷的方式,可以帮助用户在多台远程服务器上进行公钥的部署。下面是一个简单的Shell脚本示例: ``` #!/bin/bash # 指定要推送的公钥文件路径 public_key_file="path_to_public_key.pub" # 定义要连接的远程服务器列表 remote_servers=("server1" "server2" "server3") # 循环遍历远程服务器列表 for remote_server in "${remote_servers[@]}" do # 使用ssh-copy-id命令将公钥推送到远程服务器 ssh-copy-id -i $public_key_file $remote_server # 检查推送是否成功 if [ $? -eq 0 ] then echo "公钥已成功推送到服务器 $remote_server" else echo "公钥推送失败到服务器 $remote_server" fi done ``` 以上脚本假设您已经在本地生成了一个公钥文件,并且将路径存储在`public_key_file`变量中。您需要将`remote_servers`变量替换为您要推送公钥的实际远程服务器列表。 脚本中使用的`ssh-copy-id`命令可以将公钥复制到远程服务器的`~/.ssh/authorized_keys`文件中,完成公钥部署。在每个循环迭代中,脚本会检查命令的返回值来确定公钥是否成功推送到远程服务器。 使用这个Shell脚本,您可以轻松地在多台远程服务器上批量推送公钥,提高工作效率并加强服务器安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

保定公民

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值