Установка пароля без подключения SunOS с использованием ожидаемого

Хост-система, с которой я пытаюсь установить удаленное соединение, работает на SunOS. В системе нет ssh-copy-id. После поиска я обнаружил, что следующая команда при ее выполнении будет имитировать функцию ssh-copy-id.

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

Я пытаюсь написать сценарий, используя ожидаемую для выполнения этой операции, но он терпит неудачу со следующей ошибкой.Код:

#!/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)

Из поиска я понял, что ожидаемый не будет принимать команд оболочки по умолчанию. Может ли кто-нибудь помочь в решении моей проблемы. Заранее спасибо.

1 ответ

Вы скучаете по spawn команда: spawn запускает процесс, с которым вы взаимодействуете. Вы также скучаете по ssh-copy-id команда:

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

Однако то, что вы делаете, значительно снижает безопасность. Передавая пароль в виде открытого текста в командной строке, где он, вероятно, будет храниться в файле истории вашей оболочки.

Другие вопросы по тегам