Kor*_*iev 8 ssh bash shell expect
所以我想自动化我的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 Music Sites
Desktop Library Pictures expect-test.exp
esther:~ ciaran$ pwd
/Users/ciaran
esther:~ ciaran$ hostname
esther.local
Run Code Online (Sandbox Code Playgroud)
正如我所说,我没有shell脚本编写经验,但我认为这是因为我仍然"内部"期望,而不是"内部"SSH.有没有办法在我登录后终止期望,并让它将SSH会话移交给我?
我在"发送 - "\ r""之后尝试过'close'和'exit'等命令.是的,他们做了我想做的事情并且期望死去,但是它以报复性的方式将SSH会话带回来,让我回到我开始的地方.我真正需要的是期望完成它的工作并终止,将SSH会话留在我手中,就像我手动完成它一样.
感谢所有帮助.[1]我知道有一个名字,但我不知道它是什么.这是令人恐惧的事情之一,不能用Google搜索,因为标点字符被忽略了.作为一个附带问题,这里的故事是什么?