启动以下脚本时,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
谢谢!
答案 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 。