Моя проблема похожа на вот этот , Я пытаюсь автоматизировать ту часть, где я могу получить доступ к удаленному компьютеру и запустить команду как суперпользователь. Он отлично работает, пока не войдет в систему, как здесь: -
$ ssh-keygen -t rsa -b 2048
к
$ ssh-copy-id id@server
id@server's password:
$ ssh id@server
id@server:~$
Накладные расходы для меня заключаются в том, что я могу запросить у пользователя пароль удаленной машины только один раз (при генерации ключей ssh), и после этого при запуске команды в качестве суперпользователя он не должен снова запрашивать пароль, т.е. ему не нужна такая команда, как ниже:-
sudo su
Как я могу это сделать? потому что я попытался сохранить пароль как переменную, а затем подставить значение, например: -
echo -n "Enter password > "
read passwd
sshpass -p $username ssh -o StrictHostKeyChecking=no $username@$server sudo some_application &
Он запросит пароль, если я не могу заменить значение объявленной мной переменной.
Вы пробовали использовать expect
?
Простой сценарий входа в систему написан в режиме ожидания:
#!/usr/bin/expect
set timeout 9
set username [lindex $argv 0]
set password [lindex $argv 1]
set hostname [lindex $argv 2]
log_user 0
if {[llength $argv] == 0} {
send_user "Usage: scriptname username \'password\' hostname\n"
exit 1
}
send_user "\n#####\n# $hostname\n#####\n"
spawn ssh -q -o StrictHostKeyChecking=no $username@$hostname
expect {
timeout { send_user "\nFailed to get password prompt\n"; exit 1 }
eof { send_user "\nSSH failure for $hostname\n"; exit 1 }
"*assword"
}
send "$password\r"
expect {
timeout { send_user "\nLogin failed. Password incorrect.\n"; exit 1}
"*\$ "
}
send_user "\nPassword is correct\n"
send "exit\r"
close
Пример использования:
./script_name user_foo pass_bar hostname.com
Он будет только пытаться войти в систему и выдавать какое-либо сообщение об ошибке в случае, если что-то пойдет не так, а если нет, он скажет «Пароль правильный» и затем выйдет из сеанса.
Некоторые параметры будут зависеть от системы, к которой вы подключаетесь. Кроме того, использование expect означает, что вы знаете, каким будет результат при входе в систему и выполнении команд.
это учебник покроет ваши потребности
Вы действительно скопировали свой ключ pub в файл root .ssh / authorized_keys? Я всегда после этого всегда делаю "chmod -R go = /root/.ssh", также проверяю право собственности.
Если у вас запущен selinux, вам нужно будет выполнить «restorecon» для файла authorized_keys и каталога .ssh.
И если вы хотите использовать ssh как root, вам нужно проверить / etc / ssh / sshd_config и перезагрузить sshd.