expect ssh自动登录(expect script 和 python版本)

本文介绍了如何利用Expect脚本和Python实现SSH的自动登录功能。通过 Expect 脚本,可以自动化处理交互式进程,比如SSH登录过程。同时,也展示了Python中实现相同功能的方法,帮助提升自动化运维效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

wiki:https://en.wikipedia.org/wiki/Expect

expect script版本

假设场景:

$ssh username@ip
>please input password
$password
>please select group
$group
>please select page
$page
>select server
$server
>Input account
$account
>input Password
>$password

对应脚本:

#!/usr/bin/expect -f

set ip "{ip}"
set password "{password}"
set pass "{pass}"
set user "{user}"
set timeout 2
spawn ssh {username}@$ip
expect {
    "Input account:" { send "$user\r"; exp_continue }
    "*Password:" { send "$password\r"; exp_continue }
    "*password:" { send "$pass\r"; exp_continue }
    "*Select server:" { send "26\r"; exp_continue }
     "*Select group:" { send "1\r"; exp_continue }
     "*Select page:" { send "0\r"; exp_continue }
}

interact

python 版本

import sys
import pexpect
import termios, struct, fcntl


servers = {
        #跳板机
        'jump': ('jump_server -p 2222', 'user', 'password'),
        #给自己的机器起别名登录
        'test_server1': ('ip1'),
        'test_server2': ('ip2')
    }

def getwinsize():
    """This returns the window size of the child tty.
    The return value is a tuple of (rows, cols).
    """
    if 'TIOCGWINSZ' in dir(termios):
        TIOCGWINSZ = termios.TIOCGWINSZ
    else:
        TIOCGWINSZ = 1074295912
    s = struct.pack('HHHH', 0, 0, 0, 0)
    x = fcntl.ioctl(sys.stdout.fileno(), TIOCGWINSZ, s)
    return struct.unpack('HHHH', x)[0:2]

def login(ip, account=None, password=None):
    cmd = 'ssh %s@%s' % (servers['jump'][1], servers['jump'][0])
    p = pexpect.spawn(cmd)
    #password
    p.expect('(?i)ssword')

    winsize = getwinsize()
    p.setwinsize(winsize[0], winsize[1])

    p.sendline(servers['jump'][2])
    
    #期望与输入
    p.expect('{expect string}')
    p.sendline('{what you send}')
    return p.interact()


env = sys.argv[1]
login(servers.get(env, 'dev'))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值