我正在尝试使用小型bash脚本执行expect命令,以使用密钥身份验证方法登录服务器。我的脚本如下:
#!/bin/bash
HOST=$1
/usr/bin/expect -c "
spawn ssh -i /root/.ssh/id_rsa root@$HOST
expect -exact "Enter passphrase for key '/root/.ssh/id_rsa': " ;
send "PASSPHRASE\n" ;
interact
"
错误输出是:
spawn ssh -i /root/.ssh/id_rsa root@server.domain.com
couldn't read file "passphrase": no such file or directory
你能帮忙解决这个问题吗?
答案 0 :(得分:3)
您的代码中存在引用问题。而不是尝试在命令行上将命令传递给expect
,而不是将代码保存为Expect脚本。然后,您可以从shell脚本或其他方式运行它。
<强> script.exp 强>
#!/usr/bin/expect
# usage: ./script.exp host
set HOST [lindex $argv 0]
spawn ssh -i /root/.ssh/id_rsa root@$HOST
expect -exact "Enter passphrase for key '/root/.ssh/id_rsa': "
send "PASSPHRASE\n"
interact
但是,如果您在这种情况下使用Expect进行了所有操作,那么我建议使用ssh-agent
代替。