我试图从其建立远程连接的主机系统正在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命令。有人可以帮助解决我的问题。预先感谢。
答案 0 :(得分:1)
您缺少spawn
命令:spawn
启动您正在与之交互的过程。您还缺少ssh-copy-id
命令:
spawn ssh-copy-id $username@$host
expect ...
但是,您正在做的是极大地降低了安全性。在命令行上以明文形式传递密码,该密码很可能存储在Shell的历史记录文件中。