как спрятать SSH ожидать пользователя / пароль - PullRequest
1 голос
/ 07 июня 2010

Мой сценарий Expect показывает пароль / пользователя открытым текстом, и я хочу его скрыть.

#!/usr/local/bin/expect
###########################################################################################    ############
# Input: It will handle two arguments -> a device and a show command.
###########################################################################################    ############
# ######### Start of Script ######################
# #### Set up Timeouts - Debugging Variables
log_user 0
set timeout 10
set userid  "USER"
set password  "PASS"
# ############## Get two arguments - (1) Device (2) Command to be executed
set device  [lindex $argv 0] 
set command [lindex $argv 1]
spawn /usr/local/bin/ssh -l $userid $device
match_max [expr 32 * 1024]
expect {
    -re "RSA key fingerprint" {send "yes\r"}
    timeout {puts "Host is known"}
}
expect {
    -re "username: " {send "$userid\r"} 
    -re "(P|p)assword: " {send "$password\r"}
     -re "Warning:" {send "$password\r"}
    -re "Connection refused" {puts "Host error -> $expect_out(buffer)";exit}
    -re "Connection closed"  {puts "Host error -> $expect_out(buffer)";exit}
   -re "no address.*" {puts "Host error -> $expect_out(buffer)";exit}
    timeout {puts "Timeout error. Is device down or unreachable?? ssh_expect";exit}
}
expect {
   -re "\[#>]$" {send "term len 0\r"}
   timeout {puts "Error reading prompt -> $expect_out(buffer)";exit}
}
expect {
   -re "\[#>]$" {send "$command\r"}
   timeout {puts "Error reading prompt -> $expect_out(buffer)";exit}
}
expect -re "\[#>]$"
set output $expect_out(buffer)
send "exit\r"
puts "$output\r\n"

Ответы [ 5 ]

2 голосов
/ 09 июня 2010

... и добавьте -OUseBatchMode=Yes, чтобы в случае возникновения проблем с вашими ключами ssh сразу же не работал (вы могли проверить код выхода), а не просто возвращался в режим пароля и зависал (поскольку вы работаете в интерактивном режиме)

1 голос
/ 08 июня 2010

Та же проблема существует в любом языке сценариев. Сценарий не может ввести ваш пароль, если он не знает его ... самое простое решение - использовать ssh без пароля, используя ключи.

0 голосов
/ 10 февраля 2017

Когда вы отправляете пароль через ожидаемый, если вы делаете «ps», вы можете просмотреть всю команду с паролем. Чтобы избежать этого, вы можете вызвать ожидающий скрипт из другого bash-скрипта, отправив случайную строку длиной около 500 символов и затем пароль. Затем в ожидаемом сценарии вы можете вызвать пароль как переменную $ 1.

Пример сценария Bash:

#! / Bin / bash
строка = "6e2884f8bf8418bac1ca224472c5d8206e2884f8bf8418bac1ca224472c5d8206e2884f8bf8418bac1ca224472c5d8206e2884f8bf8418bac1ca224472c5d8206e2884f8bf8418bac1ca224472c5d8206e2884f8bf8418bac1ca224472c5d8206e2884f8bf8418bac1ca224472c5d8206e2884f8bf8418bac1ca224472c5d8206e2884f8bf8418bac1ca224472c5d8206e2884f8bf8418bac1ca224472c5d8206e2884f8bf8418bac1ca224472c5d8206e2884f8bf8418bac1ca224472c5d8206e2884f8bf8418bac1ca224472c5d8206e2884f8bf8418bac1ca224472c5d8206e2884f8bf8418bac1ca224472c5d820"

. / Expectedcript $ string "MySuperSecretPassword"

И пример сценария:

#! / Usr / bin / wait -f
установить тайм-аут 20
установить строку [lindex $ argv 0]
установить пароль [lindex $ argv 1]
spawn ssh "user@192.168.1.1"
ожидать "задницу"
отправить "$ password \ r"

Надеюсь, что это решит вашу проблему.

0 голосов
/ 16 апреля 2015

Ниже приведен код ожидания, который запрашивает имя пользователя и пароль:

send_user "Username?\ "
expect_user -re "(.*)\n"
set user $expect_out(1,string)

send_user "password?\ "
stty -echo
expect_user -re "(.*)\n"
stty echo
set password $expect_out(1,string)

В качестве альтернативы, если вам нужно несколько прогонов и вы не хотите каждый раз вводить пароль повторно, вы можете сохранить пароль в файле в вашем домашнем каталоге с ограниченными разрешениями (0400) и прочитать пароль оттуда. Затем удалите файл пароля, когда он больше не нужен.

0 голосов
/ 09 июня 2010

Посмотрите на ответ Гленна здесь: Как я могу сделать запрос ожидаемого сценария для пароля?

Я пытался сделать то же самое и нашел это полезным.

...