Сервер разрешает соединения SSH, но не использует аутентификацию с открытым ключом. Я не могу изменить это в данный момент (из-за технических трудностей, а не из-за организационных проблем), но я пойду на это как можно скорее!
Что мне нужно прямо сейчас , чтобы выполнять команды на сервере , используя обычный старый счет + пароль аутентификации из сценария . То есть мне нужно сделать это неинтерактивным способом. Является ли это возможным? И как мне это сделать?
Клиент, который будет выполнять скрипт, работает на Ubuntu Server 8.04. Сервер работает Cygwin и OpenSSH.
Ответы:
Существует утилита Linux под названием
sshpass
. Он позволяет вам делать именно то, что вы хотите, и будет принимать пароль сервера либо в качестве аргумента командной строки, либо из файла (я предпочитаю этот способ, поэтому у меня не отображается пароль сервера в истории оболочки), и вы используете его вот так:sshpass -f file_with_password ssh user@server ls -la
Это будет SSH на сервер и запустится
ls -la
. Одна вещь, однако, вы должны сначала вручную подключиться к серверу ssh (если вы этого еще не сделали), чтобы сервер был добавлен к вашему~/.ssh/known_hosts
. Если вы этого не сделаете,sshpass
не сработает.источник
SSH_ASKPASS
переменной является более общим решением, которое работает в любой системе с OpenSSH и не требует установки дополнительного программного обеспечения. Для некоторых из нас (в регулируемых отраслях) установка нового программного обеспечения запускает большую административную работу.SSH_ASKPASS
не работает на всех системах. Даже если клиент поддерживает это, он не будет работать, если сервер используетkeyboard-interactive
. Я действительно столкнулся с этой проблемой при написании скрипта для распространенияauthorized_keys
файла на несколько встроенных машин.Вы можете использовать Expect для этого. Очевидно, что это не является предпочтительным с точки зрения безопасности, потому что это потребует от вас использования скрипта, который содержит ваш пароль в виде открытого текста. (Но я не буду это обсуждать, поскольку в своем вопросе вы сказали, что планируете использовать аутентификацию с открытым ключом как можно скорее!)
источник
Немного зависит от языка сценария, который вы используете. Я пишу почти все на Python сейчас, где это не проблема. И pyssh, и Paramiko позволяют просто и без проблем написать пароль.
Если вы намереваетесь сделать это с помощью (ba) sh-скриптов и использовать OpenSSH, это будет сложнее. OpenSSH явно запрещает вам вводить пароли в командной строке (поскольку все пользователи могут видеть командную строку, используя что-то вроде этого
ps -fe
, что плохо для mojo). В этом случае вам придется напрямую взаимодействовать с программой ssh и иметь два варианта:источник