shell脚本之 对于 非ssh expect 免密登陆问题

背景:一般为了安全hadoop生产集群与公司其他服务器不能ping,不能互相ssh免密登录的。绝大多数是hadoop集群服务器可以有账号密码可以登录到其他服务器,但其他服务器,不可以登录到公司hadoop集群服务器。业务需要 从一台非业务服务器上scp拉取数据,这时用到 expect远程登录

先看有无 安装  rpm -qa |grep expect

有略过此步骤,没有 安装  yum install expect

注意点:脚本是  业务_功能.exp

脚本:

#!/usr/bin/expect 
#默认是秒,-1是一直保持连接
#set timeout 1000
set passwd "xxxx"
spawn scp -r work@10.68.9.30:/home/work/thunderbird_loaded /opt/user/work/thunderBird/

#如果遇到提示
expect "*password:*"

#则 \n回车确认
send "$passwd\n"

#如果服务器你的账号是普通用户则  ]$,超级用户是 ]# ,这里用]*通配符
expect "]*" 

#这里我这业务完了遇到]*就退出,不能一直让它挂着。
send "exit\r"
expect eof

 

例二:

#!/usr/bin/expect 
#defalut s
#set timeout 1000
set passwd "xxxxxx"

#登录
spawn ssh work@10.68.9.30
expect "*password:*"
send "$passwd\n"
expect "]*" 
send "rm -rf /home/work/thunderbird_loaded/*\n"
expect "]*" 
send "exit\r"
expect eof

执行命令      expect 业务_功能.exp

如果想更多更快速了解,看看这篇文章:https://www.cnblogs.com/iops/p/expect-tutorial-and-example.html

Shell脚本中,可以通过Expect脚本来自动化地通过SSH连接到堡垒机(也称为跳板机)并执行命令Expect是一个用于自动化控制交互式应用程序的命令解释器,比如telnet、ftp、passwd、fsck、rlogin、ssh或者甚至是系统上的命令行。 以下是使用Expect脚本通过SSH连接到堡垒机并执行命令的基本步骤: 1. 安装Expect。在大多数Linux发行版中,可以通过包管理器安装Expect,例如在Ubuntu中可以使用`sudo apt-get install expect`命令安装。 2. 创建一个Expect脚本使用`spawn`命令启动SSH会话,然后使用`expect`命令等待特定的字符串(通常是密码提示),接着使用`send`命令发送密码。 3. 在Shell脚本中调用Expect脚本。 下面是一个简单的示例: ```bash #!/usr/bin/expect # 调用SSH命令连接到堡垒机 spawn ssh 用户名@堡垒机地址 # 等待密码提示 expect "password:" # 发送密码(注意:为了避免密码显示在历史记录中,应当使用send_user) send_user "你的密码\n" # 交互模式,让脚本继续交互式操作 interact ``` 将上述脚本保存为`ssh_to_bastion.exp`,然后通过Shell脚本调用它: ```bash #!/bin/bash expect ssh_to_bastion.exp ``` 确保将`用户名`、`堡垒机地址`和`你的密码`替换为实际的值,并根据实际情况调整脚本使用Expect脚本自动化SSH登录时需要注意安全性,因为脚本中会包含明文密码。出于安全考虑,建议使用密钥认证来替代密码认证,或者使用更安全的凭证管理方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值