专栏首页ACM小冰成长之路脚本链接 ssh 自动输入密码

脚本链接 ssh 自动输入密码

2860元腾讯云代金券免费领取,付款直接抵现金,立即领取>>>

腾讯云服务器1折限时抢购,2核4G云主机899元/3年,立即抢购>>>

首先安装 expectexpectexpect,因为默认是没有安装这个的,UbuntuUbuntuUbuntu 系统可以直接通过 sudo apt?get install expectsudo\ apt-get\ install\ expectsudo apt?get install expect 来安装,然后写好 expectexpectexpect 脚本,假如说叫做 login?via?sshlogin-via-sshlogin?via?ssh,如果脚本没有参数的话,直接 expect login?via?sshexpect\ login-via-sshexpect login?via?ssh 就可以了,注意必须用 expectexpectexpect 来运行这个脚本,其他 shellshellshell 工具是无法解析这个脚本的。

不过我这里写的 login?via?sshlogin-via-sshlogin?via?ssh 脚本有一些参数:

Usage: expect login-via-ssh username password hostname realip script

主要功能是通过 sshsshssh 链接到用户名为 usernameusernameusername,密码为 passwordpasswordpassword 的服务器,服务器的主机名叫做 hostnamehostnamehostname,真实的 IPIPIP 地址为 realiprealiprealip,链接到这个服务器后执行 scriptscriptscript 脚本。

#!/usr/bin/expect -f

set timeout 10
set username [lindex $argv 0]
set password [lindex $argv 1]
set hostname [lindex $argv 2]
set realip   [lindex $argv 3]
set script   [lindex $argv 4]

spawn ssh -l $username $realip "echo '$password' | sudo -S ~/$script $hostname"

expect {
    "(yes/no)?" {
        send "yes\n"
        expect "password:"
        send "$password\n"
    }
    "password:" {
        send "$password\n"
    }
}

interact

这里用来实现自动输入的是 expectexpectexpect 部分,当检测到 (yes/no)?(yes/no)?(yes/no)? 的时候,会自动输入 yesyesyes,检测到 password:password:password: 时会自动输入 passwordpasswordpassword。

另外,spawnspawnspawn 后双引号里的内容,是要在 sshsshssh 远程链接到的服务器上执行的,因为 sudosudosudo 权限需要键入密码,所以通过 echoechoecho 的方式来进行自动输入密码。

说到这里,就不得不说的是,常见的自动输入密码的方法有三种,但是对于 sshsshssh 和 scpscpscp 这种命令只能通过 expectexpectexpect 来进行自动输入密码的操作。

xscpxscpxscp 脚本:

#!/usr/bin/expect -f
# Usage: expect xscp a b c

set timeout 10
set source [lindex $argv 0]
set target [lindex $argv 1]
set passwd [lindex $argv 2]

spawn scp $source $target

expect {
    "(yes/no)?" {
        send "yes\n"
        expect "password:"
        send "$passwd\n"
    }
    "password:" {
        send "$passwd\n"
    }
}

interact

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python:line xx: syntax error: unexpected end of file

    经过查阅发现这种情况可能是两种原因导致的, 一:脚本格式问题,在 LinuxLinuxLinux 环境下,应该使用 unixunixunix 格式,而不是 d...

    f_zyj
  • HDU-6010-Daylight Saving Time

    ACM模版 描述 ? 题解 这个题的难点在于题目不好懂,只要读懂了题目,细心一些的人都能做出来。 大致的思路是先预处理出来每年的两个时间节点,也就是每年三月份的...

    f_zyj
  • 51Nod-1661-黑板上的游戏

    ACM模版 描述 ? 题解 很少见官方题解如此长篇大论(详细): ? 另外看到一个比较好的博客,讲得也十分详细,代码也十分的好,WildKid1024’s bl...

    f_zyj
  • 7.9 VR扫描:VR头显销售数据在亚马逊大幅下滑;微软新专利可智能减弱HoloLens外部亮度

    近日,分析机构Thinknum跟踪了主要VR头显的销量排名趋势,包括PS VR、Gear VR、Oculus GO,以及HTC Vive。并在报告中指出,这四款...

    VRPinea
  • React Native的HTTP请求

    Oceanlong
  • TiDB 在平安核心系统的引入及应用

    所以在我们引入前从以下六个方面分别对 TiDB 进行测试验证,其中功能与架构、配置与管理、备份与恢复都是针对我们运维管理,SQL 特性、基准测试、应用场景测试则...

    PingCAP
  • “夹心饼干”微软WMR求突破,布局商业领域是个好方法?

    在HTC Vive和Oculus Rifit等PC头显,与Oculus Go等VR一体机的夹击下,微软WMR布局To B领域,或许是个不错的策略。但前路依然困难...

    VRPinea
  • 翘首盼望“改变游戏规则”的产品?但AR眼镜的老问题苹果恐怕也难解决

    按照苹果的设计风格和“追求完美、极简主义”的理念来看,大家对苹果AR眼镜的外形倒真的值得期待下。

    VRPinea
  • JAVA 拾遗 —— 关于SPI机制

    实现一个自定义的SPI1. 项目结构2. interface 模块3. good-printer 模块4. bad-printer模块SPI 在实际项目中的应用...

    芋道源码
  • Linux 命令(100)—— expr 命令

    expr(expression) 命令用于计算表达式的值。支持关系运算、算数运算、字符串匹配、截取、获取长度等相关运算。只支持整数和字符串,不支持浮点数。若涉及...

    Dabelv

扫码关注云+社区

领取腾讯云代金券

http://www.vxiaotou.com