Как ssh из bash script?
Я пытаюсь создать ssh-соединение и делать некоторые вещи на удаленном сервере из script.
Однако терминал запрашивает у меня пароль, а затем открывает соединение в окне терминала вместо script. Команды не выполняются до тех пор, пока я не выйду из соединения.
Как я могу получить ssh из bash script?
Ответы
Ответ 1
-
Если вы хотите, чтобы приглашение пароля исчезло, используйте аутентификацию на основе ключа (описанную здесь).
-
Чтобы запускать команды удаленно через ssh, вы должны указать их как аргумент ssh, например:
root @host: ~ # ssh root @www 'ps -ef | grep apache | grep -v grep | wc -l '
Ответ 2
Если вы хотите продолжать использовать пароли и не использовать обмен ключами, вы можете выполнить это с помощью "ожидать" следующим образом:
#!/usr/bin/expect -f
spawn ssh [email protected]
expect "password:"
sleep 1
send "<your password>\r"
command1
command2
commandN
Ответ 3
Есть еще один способ сделать это с использованием общих подключений, то есть: кто-то инициирует соединение, используя пароль, и каждое последующее соединение будет мультиплексироваться по одному и тому же каналу, что отрицает необходимость повторной аутентификации. (И еще быстрее)
# ~/.ssh/config
ControlMaster auto
ControlPath ~/.ssh/pool/%[email protected]%h
вам просто нужно войти в систему, и пока вы войдете в систему, bash script сможет открыть ssh-соединения.
Затем вы можете остановить работу script, если кто-то еще не открыл канал, нажав
ssh ... -o KbdInteractiveAuthentication=no ....
Ответ 4
Что вам нужно сделать, так это обмен ключами SSH для пользователя, с которым работает script. Посмотрите этот учебник
После этого ваши скрипты будут работать без необходимости вводить пароль. Но, ради безопасности, вы не хотите делать это для пользователей root!