Вызов ssh с отпом из скрипта - PullRequest
2 голосов
/ 02 марта 2012

Моя компания использует OTP over ssh (одноразовый пароль) для доступа к нашим производственным машинам. Взаимодействие может выглядеть примерно так:

$ ssh prod
otp-md5 942 st9621 extResponse: 

На данный момент я запускаю программу на Java, чтобы сгенерировать ответ OTP, используя информацию, полученную из SSH. Примечание: , что хэш из вывода ssh (в данном примере «942 st9621») должен быть передан команде ниже как ввод. Этот хэш меняется каждый раз, когда вы ssh.

$ java -jar jop.jar 942 st9621 <password>
LAD DARN BHOY TEST ACHE JUTE

Теперь я вырезал и вставил сгенерированный OTP («LAD DARN BHOY TEST ACHE JUTE») в другое окно консоли.

Итак, просто чтобы все прояснить: часть данных, сгенерированных из команды ssh, должна использоваться при запуске jop в сочетании с моим паролем, а затем результат передается обратно в все еще работающую команду ssh.

Я бы хотел автоматизировать этот процесс. По сути, есть bash-скрипт, который принимает имя хоста, запрашивает пароль, а затем вызывает ssh, передает код otp-md5 в jop, а затем OTP обратно в ssh. Приятно иметь в виду, что , а не , нужно вводить мой пароль в качестве аргумента командной строки, так как тогда он будет сохранен в истории команд, что является большой проблемой безопасности.

Возможно ли это?

Спасибо

Ответы [ 3 ]

1 голос
/ 02 марта 2012

непроверенная. Ожидаемый сценарий может быть что-то вроде

#!/usr/bin/env expect
set otp [exec java -jar jop.jar 942 st9621 [lindex $argv 0]]
spawn ssh prod
expect -re {extResponse: *$}
send -- "$otp\r"
interact

Вы бы использовали это как: optssh.exp <password>

Ответ на обновление, еще не проверен.

#!/usr/bin/env expect
spawn ssh prod
expect -re {otp-md5 ([^ ]+) ([^ ]+) extResponse: *$} {
    set otp [exec java -jar jop.jar $expect_out(1,string) $expect_out(2,string) [lindex $argv 0]]
    send -- "$otp\r"
}
interact
1 голос
/ 03 марта 2012

Это основано на превосходном ответе Гленна Джекмана:

#!/usr/bin/env expect

# Get host from command line
set host     [lindex $argv 0]

# Read password from the user
send_user "Password: "
# Turn off echo to hide password
stty -echo
expect -re "(.+)\n"
set password $expect_out(1,string)
# Turn echo back on
stty echo

# SSH into server
spawn ssh "$host"
expect -re {otp-md5 ([^ ]+) ([^ ]+) extResponse: *$} {
    set otp [exec java -jar jop.jar $expect_out(1,string) $expect_out(2,string) "$password"]
    send_user "\n$otp"
    send -- "$otp\r"
}
interact
0 голосов
/ 02 марта 2012

Вы можете взглянуть на ожидайте для взаимодействия с SSH.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...