小编Kor*_*iev的帖子

使用expect(1)进行SSH登录.如何退出预期并保留在SSH中?

所以我想自动化我的SSH登录.我所在的主机不允许在此服务器上进行密钥验证,因此我必须更具创造性.

我不太了解shell脚本,但是一些研究向我展示了命令'expect'和一些用于此目的的脚本.我设置了一个脚本并运行它,它完美地登录.

#!/usr/bin/env expect -f

set password "my_password"

match_max 1000

spawn ssh -p 2222 "my_username"@11.22.11.22

expect "*?assword:*"
send -- "$password\r"
send -- "\r"

expect eof
Run Code Online (Sandbox Code Playgroud)

最初,它按预期运行.

Last login: Wed May 12 21:07:52 on ttys002
esther:~ user$ expect expect-test.exp
spawn ssh -p 2222 my_username@11.22.11.22
my_username@11.22.11.22's password: 
Last login: Wed May 12 15:44:43 2010 from 20.10.20.10


-jailshell-3.2$ 
Run Code Online (Sandbox Code Playgroud)

但这就是成功结束的地方.

命令不起作用,但按Enter键只是换行.箭头键和其他非字母数字键产生符号,如'^ [[C','^ [[A','^ [OQ'等[1]

除了最初由expect脚本创建的两个提示外,不会出现其他提示.一旦期望超时,我的本地shell将执行任何被忽略的命令.一个例子:

-jailshell-3.2$ whoami
ls
pwd
hostname
Run Code Online (Sandbox Code Playgroud)

(...时间过去了,期待超时...)

esther:~ user$ whoami
user

esther:~ ciaran$ ls
Books       Documents   Movies      Public      
Code        Downloads …
Run Code Online (Sandbox Code Playgroud)

ssh bash shell expect

8
推荐指数
1
解决办法
3万
查看次数

标签 统计

bash ×1

expect ×1

shell ×1

ssh ×1