Несколько команд, использующих Plink и командный файл для коммутатора Cisco - PullRequest
1 голос
/ 09 января 2020

В настоящее время я пытаюсь написать скрипт для изменения местоположения (snmp) более 200 коммутаторов Cisco.

Моя проблема заключается в том, что я не могу запустить более одной команды одновременно. Я создал командный файл, который автоматически подключается к коммутатору и читает текстовый файл, в котором перечислены команды. Но независимо от того, что я делаю, лучший результат, который я получил, заключался в том, что была выполнена только первая команда.

пакетный файл:

cmd.exe /c echo n | "Filepath(plink)" -ssh Switch Hostname -l Username -pw "Password" -m "txt File"

txt Файл:

conf t
snmp-server location test
end
wr
exit

Я уже пробовал другие разделители в txt-файле, такие как ; | et c. Но, похоже, ничего не работает.

Ответы [ 2 ]

1 голос
/ 09 января 2020

На самом деле это известное ограничение Cisco, заключающееся в том, что он не поддерживает несколько команд в канальной команде S SH "exe c".

Секция цитирования 3.8.3.6 -m : прочитать удаленную команду или скрипт из файла руководства PuTTY / Plink:

На некоторых серверах (в частности, Unix системах) вы даже можете поместить несколько строк в этот файл и выполнить несколько последовательных команд или целый сценарий оболочки; но это, возможно, злоупотребление, и нельзя ожидать, что он будет работать на всех серверах. В частности, известно, не работает с определенными «встроенными» серверами, такими как маршрутизаторы Cisco.


Хотя на самом деле ваши команды в любом случае, вероятно, это не отдельные команды оболочки верхнего уровня. Я думаю, что snmp-server (и другие) являются подкомандами из conf t, не так ли? Таким образом, ваш код не будет работать, даже если Cisco поддерживает несколько команд на канале "exe c".

Подробнее см. Как вводить команды в PuTTY путем создания командного файла?

Вам необходимо выполнить conf t и затем предоставить его подкоманды для стандартного ввода.

Один из способов сделать это так:

(
    echo snmp-server location test
    echo end
    echo wr
    echo exit
) | plink -ssh hostname -l username -pw password conf t
0 голосов
/ 25 января 2020

Если вышеупомянутое ограничение Cisco не влияет на этот синтаксис:

SET /P USERNAME=Enter remote Username:
SET "psCommand=powershell -Command "$pword = read-host 'Enter remote Password' -AsSecureString ; ^
$BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword); ^
    [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)"" for /f "usebackq delims=" %%p in (`%psCommand%`) do set PASSWORD=%%p
plink -t -pw %PASSWORD% %USERNAME%@Hostname "COMMAND1; COMMAND2; COMMAND3; ETC"

Если вышеупомянутое ограничение Cisco НЕ влияет на вышеупомянутый синтаксис:

SET /P USERNAME=Enter remote Username:
SET "psCommand=powershell -Command "$pword = read-host 'Enter remote Password' -AsSecureString ; ^
$BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword); ^
    [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)"" for /f "usebackq delims=" %%p in (`%psCommand%`) do set PASSWORD=%%p
plink -t -pw %PASSWORD% %USERNAME%@Hostname "COMMAND1"
plink -t -pw %PASSWORD% %USERNAME%@Hostname "COMMAND2"
plink -t -pw %PASSWORD% %USERNAME%@Hostname "COMMAND3"
plink -t -pw %PASSWORD% %USERNAME%@Hostname "Etc"

Barbari c , да, но я думаю, что Cisco можно поблагодарить за это;) (Это не проверено, поскольку у меня нет устройства cisco, на котором можно тыкать, но теория должна быть обоснованной)

...