在ssh登录成功后,预计脚本不会发送命令

时间:2016-11-09 01:08:15

标签: linux bash ssh expect

启动以下脚本时,ssh登录成功,我可以进行交互,但不会发送cd folder命令。如果我确定这是我要发送的第一个命令,以及如何发送expect "$"命令,那么我的cd folder命令是否有用?

这是简短的期望脚本:

#!/usr/bin/expect
eval spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no host@exemple.com
expect "password"
send "mypassword\r"
expect "$"
send "cd folder\r"
interact

谢谢!

2 个答案:

答案 0 :(得分:2)

您需要expect更具体的shell提示符。

根据期望的手册:

  

请注意,在许多编辑器中,^$分别匹配行的开头和结尾。但是,因为期望不是面向行的,所以这些字符与期望匹配缓冲区中当前数据的开头和结尾(而不是行)相匹配

答案 1 :(得分:0)

您应该使用ssh-keygen(或类似this)创建SSH密钥,并要求服务器管理员将您的公钥添加到服务器上的~/.ssh/authorized_keys。然后,您将能够登录到远程计算机而无需指定密码。否则,对该脚本具有读取权限的任何人都可以代表您访问远程服务器有关于此问题的good discussion

使用配置的键,您可以简单地

ssh user@exemple.com -- 'cd folder; # whatever'

或使用here document语法:

#!/bin/bash -
ssh -tt user@host <<'EOC'
cd folder
# do something else
exit
EOC

注意,第一个-t选项强制伪终端分配。多个-t选项强制 tty 分配,即使ssh没有本地 tty