shell脚本实现连接远程服务器(ECS)

原文地址:shell脚本实现连接远程服务器(ECS)

说明

本篇文章主要使用expect脚本来实现自动连接远程服务器并实现交互,不会大篇幅介绍expect的用法,有兴趣的读者可以自己了解,expect是个很强大的实现自动化交互的工具哦~~

代码示例

#!/usr/bin/expect
set timeout 10
set password 123456
spawn ssh [email protected]

expect {
    "(yes/no)?" {
        send "yes\r";
        expect "password:";
        send "${password}\r";
        exp_continue;
    }
    "password:" {
        send "${password}\r";
        exp_continue;
    }
}
interact
  • 第一行的 #!/usr/bin/expect 是告诉系统在执行这个脚本的时候用哪个命令来执行,这边是用expect,是一个类似bash和sh的shell

  • 第二行 set timeout 10 设置超时时间为10s

  • 第三行 set password 123456 定义了一个变量 password,这个变量记录了登陆远程服务器的密码

  • 第四行 spawn ssh [email protected] 调用 spawn 命令来执行一个系统命令。spawn是expect shell的内建命令,只有在expect环境下才可以使用。这行代码的功能就是通过ssh连接远程ECS

  • 6~17 行用了一个 expect 命令,可以将这个命令理解为期待shell中输出结果中包含什么关键字

    • 如果包含的是 (yes/no)? 则表示是第一次连接这个远程服务器,需要手动确认是否保存生成的密钥到 ~/.ssh/know_hosts 当中,通过send命令输出 yes 到shell中。之后再次期望shell的输出结果中包含 password:关键字,再用send命令输出密码。
    • 如果包含的是 password: 则表示不是第一次连接这个远程服务器,直接用send输出密码即可

正常如果网络正常,服务器ip、用户名、密码正确的话,执行上面的脚本就可以自动连接到远程ecs了。(注意使用的时候将上述用户名、密码、ip替换成自己的)

发布了55 篇原创文章 · 获赞 29 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_33215972/article/details/82386349