Expect 脚本是一个很棒的 linux/unix 实用程序。我在日常生活中必须处理很多 unix 服务器,无论是在工作中还是我的托管服务器。所以我需要记住很多 SSH 用户,他们的密码,然后是 SU 用户和密码。服务器数量多的时候有点乱。所以我想写一个脚本,让我自动登录到服务器。当我第一次开始做这件事时,我被困在如何输入 SSH 密码的问题上,因为普通的 unix shell 在提示登录时无法发送密码。然后我开始了解 expect 脚本,它允许自动与打开终端输入的程序进行交互。
Expect Script 非常容易学习,顾名思义,它通过解析命令的输出来工作,当它与指定的正则表达式匹配时,它会处理指定的指令。
一、Expect 脚本 SSH 示例
这是我创建的脚本,用于自动登录到 SSH 服务器,然后使用超级用户登录,然后运行一个简单的命令。sshsudologin.expect
#!/usr/bin/expect #Usage sshsudologin.expect set timeout 60 spawn ssh [lindex $argv 1]@[lindex $argv 0] expect "yes/no" { send "yes\r" expect "*?assword" { send "[lindex $argv 2]\r" } } "*?assword" { send "[lindex $argv 2]\r" } expect "# " { send "su - [lindex $argv 3]\r" } expect ": " { send "[lindex $argv 4]\r" } expect "# " { send "ls -ltr\r" } interact
二、关于 Expect 脚本的要点
- 请注意指定 expect 脚本将用作解释器的第一行。
- 预计脚本默认超时为 10 秒,因此我将超时设置为 60 秒以避免在登录提示需要时间时出现任何超时问题。
- 请注意 expect 命令后跟正则表达式,然后是应该作为响应发送的内容。 添加第一个是/否选项以确保在尚未导入远程服务器密钥时不会失败。
- 另一个 expect 正则表达式因服务器而异,对于我的服务器,它以“#”结尾,但对于其他一些服务器,它可能以“$”结尾,因此您可能需要相应地对其进行编辑。 唯一要检查的是 expect 命令的正则表达式应该匹配,以便它发送相应的命令或密码。
- 最后一个 expect 命令只是表明我们也可以在登录到服务器后发送命令。
这是我使用正确参数运行上面的 expect 脚本时的输出。
pankaj@Pankajs-MacBook-Pro:~$/Users/pankaj/scripts/sshloginsudo.expect 'journaldev.com' 'pankaj' 'ssh_pwd' 'su_user' 'su_pwd' spawn ssh pankaj@journaldev.com pankaj@journaldev.com's password: Last login: Sun Jun 9 19:54:17 2013 from c-67-161-57-160.hsd1.ca.comcast.net pankaj@journal [~]# su - su_user Password: su_user@journal [~]# ls -ltr total 708 ...
三、关于 Expect 脚本的额外提示
- Expect 脚本可以重复使用,因为所有信息都作为参数传递,因此最好为它们中的每一个创建别名以便快速登录并节省输入所有参数的时间。 例如,
alias journal="/Users/pankaj/scripts/sshloginsudo.expect 'journaldev.com' 'pankaj' 'ssh_pwd' 'su_user' 'su_pwd'"
- 最好始终使用单引号来传递参数,因为大多数时候密码包含特殊字符,如果不加引号,可能会导致有趣的结果。
四、搬瓦工新手教程和优惠套餐
搬瓦工最推荐套餐
- 搬瓦工优惠码:BWHCGLUKKB
- 搬瓦工购买教程:《搬瓦工新手用户注册和支付宝购买图文指导教程》
方案 | 内存 | CPU | 硬盘 | 流量/月 | 带宽 | 机房 | 价格 | 购买 |
---|---|---|---|---|---|---|---|---|
KVM (最便宜) | 1GB | 2核 | 20GB | 1TB | 1Gbps | DC3 CN2 DC8 ZNET (购买后在后台迁移) | $49.99/年 | 购买 |
KVM | 2GB | 3核 | 40GB | 2TB | 1Gbps | $52.99/半年 $99.99/年 | 购买 | |
CN2 GIA-E (最推荐) | 1GB | 2核 | 20GB | 1TB | 2.5Gbps | DC6 CN2 GIA-E DC9 CN2 GIA 日本软银 JPOS_1 荷兰联通 EUNL_9 加拿大 CN2 GIA | $49.99/季度 $169.99/年 | 购买 |
CN2 GIA-E | 2GB | 3核 | 40GB | 2TB | 2.5Gbps | $89.99/季度 $299.99/年 | 购买 | |
HK | 2GB | 2核 | 40GB | 0.5TB | 1Gbps | 中国香港 CN2 GIA 新加坡 CN2 GIA 日本东京 CN2 GIA 日本大阪 CN2 GIA | $89.99/月 $899.99/年 | 购买 |
HK | 4GB | 4核 | 80GB | 1TB | 1Gbps | $155.99/月 $1559.99/年 | 购买 | |
OSAKA | 2GB | 2核 | 40GB | 0.5TB | 1.5Gbps | 日本大阪 CN2 GIA | $49.99/月 $499.99/年 | 购买 |
OSAKA | 4GB | 4核 | 80GB | 1TB | 1.5Gbps | $86.99/月 $869.99/年 | 购买 |
选择建议:
- 入门:洛杉矶 CN2 套餐,目前最便宜,可选 DC3 CN2/DC8 ZNET 等机房,CN2 GT 线路,入门之选。
- 推荐:洛杉矶 CN2 GIA-E 套餐,速度超快,可选 DC6 CN2 GIA-E/DC9 CN2 GIA/日本软银 JPOS_1/联通荷兰 EUNL_9 等机房,性价比最高。
- 高端:香港 CN2 GIA 套餐/东京 CN2 GIA 套餐,价格较高,但是速度、延迟、丢包等方面无可挑剔。