Как вводить автоматически при запуске оболочки через SSH?

В моей оболочке script Я запускаю команду, которая просит меня ввести.

Как я могу дать команде входной сигнал, который ему нужен автоматически?

Например:

$cat test.sh
ssh-copy-id [email protected]

При запуске test.sh:

  • Сначала он спросит:

    Are you sure you want to continue connecting (yes/no)?

  • Затем он попросит меня ввести пароль:

    [email protected] password:

Есть ли способ ввести это автоматически?

Ответы

Ответ 2

Для простого ввода, например двух подсказок и двух соответствующих фиксированных ответов, вы также можете использовать "здесь документ", синтаксис которого выглядит следующим образом:

test.sh <<!
y
pasword
!
< < префиксы шаблона, в данном случае '!'. Все до строки, начинающейся с этого шаблона, интерпретируется как стандартный ввод. Этот подход похож на предложение о подключении многострочного эха в ssh, за исключением того, что он сохраняет fork/exec команды echo, и я считаю его более читаемым. Другим преимуществом является то, что он использует встроенную функциональность оболочки, поэтому она не зависит от ожидаемого.

Ответ 3

Определенно... Используйте команды spawn, expect и send:

spawn test.sh
expect "Are you sure you want to continue connecting (yes/no)?"
send "yes"

Есть больше примеров для, см. Справка с ожиданием в bash script

Возможно, вам придется сначала установить эти команды, в зависимости от вашей системы.

Ответ 4

ssh-key с парольной фразой, с цепочкой ключей

keychain - небольшая утилита, которая управляет ssh-агентом от вашего имени и позволяет ssh-agent оставаться включенным при завершении сеанса входа в систему. При последующих логинах keychain подключается к существующему экземпляру ssh-agent. На практике это означает, что кодовая фраза должна вводиться только во время первого входа после перезагрузки. При последующих входах используется незашифрованный ключ из существующего экземпляра ssh-agent. Это также может быть полезно для обеспечения беспроблемной аутентификации RSA/DSA в заданиях cron без ssh-ключей без пароля.

Чтобы включить keychain, установите его и добавьте что-то вроде следующего в ~/.bash_profile:

eval keychain --agents ssh --eval id_rsa С точки зрения безопасности, ssh-ident и keychain хуже, чем экземпляры ssh-agent, ограниченные временем жизни определенного сеанса, но они предлагают высокий уровень удобства. Чтобы улучшить безопасность keychain, некоторые люди добавляют параметр --clear в свой вызов ~/.bash_profile keychain. Выполняя эту кодовую фразу, необходимо снова ввести логин, как указано выше, но задания cron все равно будут иметь доступ к незашифрованным ключам после выхода пользователя из системы. Страница wiki-страницы с цепочкой ключей содержит больше информации и примеров.

Получил эту информацию от;

https://unix.stackexchange.com/questions/90853/how-can-i-run-ssh-add-automatically-without-password-prompt

Надеюсь, что это поможет

Я лично смог автоматически ввести свою кодовую фразу при запуске терминала, выполнив это: (вы можете, конечно, изменить script и поместить его в соответствии с вашими потребностями)

  • отредактируйте файл bashrc, чтобы добавить этот script;

    Проверьте, не активирован ли агент SSH

    если [-z "$ SSH_AUTH_SOCK" ]; тогда exec ssh-agent bash -c "ssh-add; $0" echo "Агент SSH был пробужден" Выход ц

    Вышеуказанная строка начнет ожидать script при запуске терминала.

    ./ssh.exp

здесь содержание этого ожидает script

#!/usr/bin/expect

set timeout 20

set passphrase "test"

spawn "./keyadding.sh"

expect "Enter passphrase for /the/path/of/yourkey_id_rsa:"

send "$passphrase\r";

interact

Здесь содержимое моего keyadding.sh script (вы должны поместить оба сценария в свою домашнюю папку, обычно /home/user )

#!/bin/bash

ssh-add /the/path/of/yourkey_id_rsa

exit 0

Я бы настоятельно предложил шифровать пароль на .exp script, а также переименовать этот .exp файл в нечто вроде term_boot.exp или что-то еще для целей безопасности. Не забывайте создайте файлы непосредственно с терминала с помощью nano или vim (например: nano ~/.bashrc | nano term_boot.exp), а также chmod +x script.sh, чтобы сделать его исполняемым. A chmod +r term_boot.exp также будет полезен, но вам нужно будет добавить sudo до. /ssh.exp в файле bashrc. Таким образом, каждый раз, когда вы запускаете терминал, вам придется вводить пароль sudo. Для меня это более удобно, чем парольная фраза, потому что я помню пароль администратора (sudo) у очага.

Кроме того, здесь другой способ сделать это, я думаю; https://www.cyberciti.biz/faq/noninteractive-shell-script-ssh-password-provider/

Конечно, я изменю свой метод для этого, когда у меня будет время.

Ответ 5

Также вы можете направить ответы в сценарий:

printf "y\npassword\n" | sh test.sh

где \n - escape-последовательность