Прежде чем этот вопрос будет удален, я уже прочитал этот, этот, этот, и этот; и большинство этих ссылок не отвечают на мой вопрос; так как:
Я попробовал sshpass, но это как-то испортило мой вход по SSH с некоторыми из моих устройств (мне пришлось сбросить known_hosts сервера). Если бы я мог изменить свой сценарий для правильной работы с sshpass, это было бы возможным решением.
Я надеюсь найти какую-то опцию ssh, которая автоматически вводит пароль; что-то вроде:
ssh -o ConnectTimeout=5 -p 'USER_PASSWORD' USER@192.168.0.*** sensors | grep Core >> sensors.txt
Или что-то с небольшим скриптом, который может распознавать и автоматически заполнять (например, макрос или что-то в этом роде?) Пароль (в любом случае половина серверов имеет одинаковый PWD).
Моя вторая проблема заключается в том, что я заметил, что сценарий иногда зависает (Ping подключается, а SSH - нет), что требует от меня ожидания тайм-аута или перезапуска сценария. Не уверен, проблема в сети или что-то в этом роде, но если я перезапущу ее, иногда она все же проходит.
ConnectTimeout = 5 работает не так, как ожидалось. Сценарий останавливается только тогда, когда сервер отключен (IP-ссылка не установлена). Когда сервер в сети, но openssh не выполняет рукопожатие, скрипт зависает ...
я использовал expect
для автоматизации входа в систему без ключа. Вот мой код. Обертка оболочки:
#!/bin/bash
HOSTNAME=$1
case `echo ${HOSTNAME:7:1}` in
d|q)
ENV='sit'
PW='pw1'
;;
u)
ENV='uat'
PW='pw2'
;;
p)
ENV='prod'
PW='pw3';
;;
esac
# Pass hostname and password to expect script
./go.exp $HOSTNAME $PW
Ожидайте сценарий:
#!/usr/bin/expect -f
set hostname [lindex $argv 0];
set password [lindex $argv 1];
spawn ssh your_username@$hostname
expect "*:"
send "$password\n"
send "bash\n"
expect "bash-*"
# The next two lines are prompt customization, it is not necessary
send "export PROMPT_COMMAND='echo -ne \"\\033k\$HOSTNAME\\033\\\\\"'\n"
send "export PS1='\\e\[0;33m\\u\\e\[0;36m@\\e\[0;33m\\h \\e\[0;32m\\w> \\e\[m'\n"
# If you don't need interactive session then you may replace the below with whatever you need
interact
Примечание. Предполагается, что имя пользователя и приглашение везде одинаковы, более того, это небезопасно, потому что пароль передается как arg в открытом тексте и поэтому отображается (например, в ps
вывод) другими пользователями