18.通过密钥免密访问目标服务器,脚本运行过程中不需要额外交互

通过密钥免密访问目标服务器,脚本运行过程中不需要额外交互,只需第一次需要输入密码,后面访问服务器只需ssh root@192.168.84.129就可直接免密登录

#!/usr/bin/expect -f

#检查参数个数(支持 <用户名> <目标IP> <密码>)

if {$argc != 3} {

复制代码
puts "Usage: [file tail $argv0] <username> <target_ip> <password>"

exit 1

}

#解析参数

set username lindex $argv 0

set target_ip lindex $argv 1

set password lindex $argv 2

#定义密钥路径

set key_path "$env(HOME)/.ssh/id_rsa"

set pub_key "$key_path.pub"

#生成SSH密钥(无则自动创建,不覆盖已有密钥)

if {! file exists $key_path || ! file exists $pub_key} {

复制代码
puts "未找到SSH密钥,正在生成..."

spawn ssh-keygen -t rsa -b 4096 -f $key_path -N ""

expect {

    "Overwrite (y/n)?" { 

        # 若密钥已存在(意外情况),不覆盖,直接退出

        puts "密钥已存在,无需重新生成"

        exit 0

    }

    eof

}

puts "密钥生成完成:$key_path"

}

#自动拷贝公钥到目标服务器

puts "正在将公钥拷贝到 username@username@username@target_ip..."

spawn ssh-copy-id -i $pub_key username@{username}@username@{target_ip}

expect {

复制代码
# 首次连接时确认主机指纹

"*Are you sure you want to continue connecting (yes/no)?" {

    send "yes\r"

    exp_continue

}

# 输入密码

"*password:" {

    send "$password\r"

}

# 处理公钥已存在的情况

"*already exist on the remote system.*" {

    puts "公钥已存在于目标服务器,无需重复拷贝"

    exit 0

}

# 处理权限拒绝(常见于root用户登录限制)

"*Permission denied*" {

    puts "错误:权限拒绝,可能是用户名/密码错误或目标服务器限制root登录"

    exit 1

}

eof

}

#验证拷贝结果

expect {

复制代码
"*Number of key(s) added: 1*" {

    puts "公钥拷贝成功!现在可免密登录:ssh $username@$target_ip"

}

default {

    puts "公钥拷贝失败,请检查目标服务器连接和密码是否正确"

    exit 1

}

}

相关推荐
程序猿老A27 分钟前
轻量应用服务器怎么搭建 WordPress站点?
服务器
m0_7436975938 分钟前
DNS的反向域名的相关问题
linux
杨云龙UP1 小时前
MySQL 主从复制管理:暂停、恢复、清理主从关系及命令执行位置
运维·数据库·mysql·主从配置·主从命令·reset replica·清除复制
snysy1 小时前
服务器安全加固与入侵检测实战:从SSH加固、防火墙策略到挖矿木马排查
服务器·安全·ssh
Android系统攻城狮1 小时前
Linux FFmpeg深度解析之avcodec_parameters_from_context调用流程与实战(十六)
linux·运维·ffmpeg·音视频进阶·ffmpeg音视频·车载音视频进阶
思想觉悟1 小时前
SEAndroid实战
android·linux·c++
隔窗听雨眠1 小时前
从存储引擎到执行计划:OceanBase高效运维的调优逻辑与工程实践
运维·oceanbase
运维行者_1 小时前
供应链安全成最大风险源,企业如何构建可控的运维体系?
运维·开发语言·网络·数据库·安全·云计算·流量监控
xiaoyunxuexibiji1 小时前
采购协同管理:从备货计划、进度确认到到货签收
大数据·运维·人工智能
小此方2 小时前
C++ 工程组件与基础设施(三)详解RPC服务的概念与安装,图片介绍Brpc服务器和客户端的搭建过程
服务器·c++·rpc