`
aqingsao
  • 浏览: 174780 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

提供用户名和密码的SSH自动登录脚本

阅读更多

使用VPN,每次都要在Terminal上重复输入命令:

ssh -D port user@host

出来密码提示符后,把复杂的密码拷贝下来,然后粘贴到Terminal,敲回车...

 

终于忍受不了这样的重复了,于是用Shell写一个可以自动登录的脚本:

#!/usr/bin/expect -f

set port port_no
set user user_name
set host host_name
set password my_password
set timeout -1

spawn ssh -D $port $user@$host
expect "*assword:*"

send "$password\r"
expect eof

把上面的代码命名成vpn,并设置755的权限之后,使用起来就方便了:./vpn。

 

上面脚本中的自动交互用到了expect,那么什么是expect呢?

expect是一个基于Tcl的用于自动交互操作的工具语言,它适合用来编写需要交互的自动化脚本,比如上面提到的SSH输入用户名密码,自动FTP等等场景。

 

除了具有Tcl的语法,expect提供了几个常用的命令:

1. send

用来发送一个字符串,比如 send "hello world"。

初始情况下,这个字符串会发送到标准输出。如果你用的是max OSX或者linux,可以在Terminal下直接输入expect命令并回车,就进入了expect交互环境,此时,输入send "hello world"就可以看到结果。

一旦你的程序已经与其他程序进行交互,字符串就会被发送到其他程序那里。如上面的例子脚本中,我们调用send ”$password\r"就是把密码发送给SSH连接的服务器端指定端口。

 

2. expect

与send相反,expect用来等待你所期望的字符串。比如expect "hello"

在expect后面跟的字符串中,你可以指定一个正则表达式。

expect会一直等待下去,除非收到的字符串与预期的格式匹配,或者到了超期时间。

 

3. spawn

spawn用来启动一个新的进程,比如上面的spawn ssh -D $port $user@$host,Expect会执行命令“ssh -D $port $user@$host”。

在交互式的场景中,当你输入命令后,可能服务器端会返回一些操作提示符,以让你输入命令。Expect提供了这样三个常用的命令,spawn, expect和send,恰好满足这种需要。把它们结合起来使用,可以实现很多简单的自动化脚本。

 

其它常用的命令还有:interact,比如你通过脚本自动连接到了某个ftp,并输入了用户名密码,此时需要人工输入一些命令,就可以使用interact命令,它会把脚本的控制权交给用户;sleep,等待多少秒等等。

 

由于expect是从Tcl继承下来的,所以也支持Tcl的语法和命令,比如变量声明、流程控制等等。

 

上面脚本的一些解释:

1. set timeout 300:设置超时时间300s。如果设为-1,代表永不超时。

2. expect eof:等待接受文件结束符。

 

另请参考我的另外一片博客,使用Expect编写自动VPN登陆脚本

分享到:
评论
1 楼 zhkzyth 2012-01-10  
嗷嗷,非常感谢你的ssh教程,特别是对那几个函数的说明,我跟着就改好了自己的了,thanks....

相关推荐

    xshell ssh自动登录并执行命令脚本.rar

    本压缩包“xshell ssh自动登录并执行命令脚本.rar”提供了一种自动化的方式,通过Xshell自动连接到SSH服务器并执行预设的命令脚本,极大地节省了手动操作的时间。 首先,我们需要了解SSH(Secure Shell),这是一种...

    ssh 自动登录电脑运行命令脚本

    设置用户名密码后,ssh登录到另一台linux电脑,自动运行命令

    windows下通过ssh自动备份的脚本

    通过以上步骤,我们可以构建一个强大的Windows SSH自动备份系统,确保数据的安全和可靠性。记住,定期备份是防止数据丢失的重要措施,因此设置好这样的自动化流程对于任何组织和个人来说都至关重要。

    自动登陆ssh,批量ip脚本操作

    总的来说,自动登陆SSH并进行批量IP脚本操作是IT运维中的重要技能,它能大大提高工作效率,减少人为错误,并为大规模服务器管理提供便利。理解并熟练运用这些技巧,对于任何系统管理员来说都是至关重要的。

    基于SSH实现登录的Demo

    从客户端使用`ssh 用户名@服务器地址`命令尝试连接,如果配置正确,应能无密码登录。 在"基于SSH实现登录的Demo"项目中,LoginDemo可能是实现这个过程的一个示例代码或者脚本。它可能包括了生成密钥对、配置服务器...

    纯shell的自动登录执行脚本

    【纯shell的自动登录执行脚本】是一种利用Unix或Linux系统的shell脚本来实现自动化远程登录和执行命令的技术。在这个特定的脚本中,它被设计为通过telnet协议连接到多台主机,并按照预设的顺序执行指定的命令。这个...

    中文版 putty 保存密码,自动登录 ,配置保存在文件

    通常,Putty在每次连接时都需要用户手动输入用户名和密码,这在频繁的服务器操作中可能会显得繁琐。这个版本的Putty允许用户保存密码,意味着在连接时可以自动填充密码并完成登录,节省了时间。不过,需要注意的是,...

    shell脚本实现ssh自动登录功能分享

    ### Shell脚本实现SSH自动登录功能详解 #### 一、背景与需求 在日常工作中,运维人员或开发人员经常需要远程连接到不同的服务器进行管理和操作。对于Mac用户来说,可能会发现缺少像SecureCRT这样的图形界面工具来...

    使用批处理实现telnet自动登陆并执行ping命令

    3. **自动登录**:telnet连接后,通常需要手动输入用户名和密码。为了自动化这个过程,我们可以使用以下技巧: - 在telnet命令后立即输入用户名,然后按`Enter`。 - 按`Enter`再次输入密码。 - 由于批处理不支持...

    ssh脚本,ssh脚本,ssh脚本

    3. **自动化登录**:使用`ssh-keygen`生成公钥和私钥对,然后将公钥复制到远程服务器的`~/.ssh/authorized_keys`文件中,可以实现无密码登录。 4. **脚本执行命令**:在SSH脚本中,你可以通过`ssh user@hostname '...

    Shell脚本实现自动输入密码登录服务器

    Shell脚本实现自动输入密码登录服务器是自动化运维和部署中的常见需求,特别是在执行涉及权限验证的任务时,如scp文件传输或SSH远程连接。在这种情况下,使用expect工具可以帮助我们编写脚本,自动处理需要用户交互...

    python交换机自动备份脚本

    这些通信方式都需要在脚本中正确配置设备的IP地址、用户名和密码,以确保能够安全连接并执行备份操作。 在描述中提到了配置文件,这通常是一个包含所有设备信息的文本文件,例如JSON或CSV格式,包含每一台交换机的...

    putty可保存用户名密码版本

    标题提到的"putty可保存用户名密码版本"指的是PuTTY的一个功能,允许用户在设置会话时存储登录凭据,以方便后续快速连接,避免每次手动输入用户名和密码。 PuTTY的基本操作包括以下几点: 1. **下载与安装**:...

    linux 自动登录

    - 对于想要深入了解的用户,可以查看系统的服务脚本和登录管理器的源码,了解自动登录背后的实现原理。 8. **远程控制与SSH** - 即使设置了自动登录,远程通过SSH访问仍然需要密码或密钥对认证,这增加了远程管理...

    hadoop集群配置ssh免登录shell脚本

    在IT行业中,尤其是在分布式系统和大数据处理...利用`hadoop_ssh_auto_login.sh`脚本和`ip_hosts.txt`文件,你可以方便地自动化这个过程,使得集群管理更加高效。对于大规模的Hadoop部署,这样的自动化工具至关重要。

    批量打通SSH脚本

    在提供的压缩包文件中,"批量打通ssh脚本"很可能是这样一个结合了`expect`和`python`功能的脚本,具体实现可能因需求而异,但其核心思想是利用这两个工具自动化SSH连接流程。你可以解压文件,查看并学习其中的实现...

    交换机SSH批量下发脚本工具

    3. **自动认证**:工具需要能处理设备间的认证,包括用户名、密码或密钥对,有时也可能支持SSH密钥无密码登录。 4. **错误处理**:在批量操作中,难免会遇到设备离线或配置失败的情况,好的工具应能捕捉并报告这些...

    使用脚本进行ssh登录服务器1

    这个脚本读取一个包含IP地址和密码的文件,然后对每一行(代表一个服务器)调用`noscp.exp`脚本来复制本地的`authorized_keys`文件到远程服务器的`.ssh`目录下,实现免密登录。`noscp.exp`是一个结合了`expect`的SCP...

    linux系统的ssh免密码登录机制原理及实现范例

    - 在Hadoop集群中实现SSH免密码登录时,需要确保所有节点上的用户名相同,以便于统一管理。 - 对于大型集群,建议使用脚本自动化整个配置过程,以减少手动操作的工作量和出错的可能性。 通过上述步骤,我们不仅理解...

Global site tag (gtag.js) - Google Analytics