Установка пароля без подключения 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 ...
Однако то, что вы делаете, значительно снижает безопасность. Передавая пароль в виде открытого текста в командной строке, где он, вероятно, будет храниться в файле истории вашей оболочки.