使用Expect建立无密码连接SunOS

时间:2018-07-04 07:07:14

标签: shell unix expect sunos password-less

我试图从其建立远程连接的主机系统正在SunOS上运行。系统上没有可用的ssh-copy-id。 搜索之后,我发现以下命令在执行时将模仿ssh-copy-id函数。

 cat ~/.ssh/id_rsa.pub | ssh remotehost 'cat >>~/.ssh/authorized_keys && echo "Host Key Copied"'

我正在尝试使用Expect编写脚本来执行此操作,但是由于以下错误而失败。 代码:

#!/usr/bin/expect -f
#!/bin/bash

set username  [lindex $argv 0]
set password  [lindex $argv 1]
set host      [lindex $argv 2]

cat ~/.ssh/id_rsa.pub | ssh remotehost 'cat >>~/.ssh/authorized_keys && echo \"Host Key Copied\"'
expect "Password:"
send "$password\n"
expect eof

错误:

invalid command name "cat"
    while executing
"cat ~/.ssh/id_rsa.pub | ssh remotehost 'cat >>~/.ssh/authorized_keys && echo \"Host Key Copied\"'"
    (file "./remote.sh" line 8)

通过搜索,我了解到默认情况下,expect不会接受shell命令。有人可以帮助解决我的问题。预先感谢。

1 个答案:

答案 0 :(得分:1)

您缺少spawn命令:spawn启动您正在与之交互的过程。您还缺少ssh-copy-id命令:

spawn ssh-copy-id $username@$host
expect ...

但是,您正在做的是极大地降低了安全性。在命令行上以明文形式传递密码,该密码很可能存储在Shell的历史记录文件中。