Сценарий Bash / Ожидайте входа через SSH и стук порта Ключи SSH невозможны

2

Мой сервер авторизации находится за брандмауэром, который использует стук портов, чтобы разрешить вход. Логин-поток

  1. Введите в команду стука порта. Это требует ввода моего внешнего IP.
  2. При появлении запроса введите мой пароль для стучания портов.
  3. Введите в команду ssh
  4. Введите пароль

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

#!/bin/expect
spawn fwknop -A tcp/22 -a `curl http://ipecho.net/plain` -D foo.org -P tcp -p 9999
expect "Enter encryption password:"
send "pass1\r"

spawn ssh -Y bar@foo.org
expect "bar@foo.org's password:"
send "pass2\r"

Выполнение каждой команды отлично работает из командной строки. Но когда я пытаюсь запустить первую команду spawn

spawn fwknop -A tcp/22 -a `curl http://ipecho.net/plain` -D foo.org -P tcp -p 9999

Я получаю ошибку:

fwknop: fko_set_spa_message: Error 10 - Invalid allow IP address in the SPA message data
send: spawn id exp7 not open

Но скопируйте / вставьте ту же команду в командную строку, и она отлично работает.

Zach Melnick
источник
Ошибка в командной строке, если вы пропустите -a переключить (или передать это хитрый IP)?
Paul

Ответы:

0

@ Скотт прав, ожидайте, что Tcl ничего не делает с обратными галочками, это просто символы. Это должно работать, хотя:

#!/bin/expect
set ip [exec curl http://ipecho.net/plain]
spawn fwknop -A tcp/22 -a $ip -D foo.org -P tcp -p 9999
glenn jackman
источник
0

У меня нет опыта работы с expectИнтересно, Это понимает обратные тики. Пытаться

#!/bin/sh # или указать #!/usr/bin/env bash если вы считаете, что вам нужно.
expect <<- !
spawn fwknop -A tcp / 22 -a `curl http: // ipecho.net / plain` -D foo.org ...
ожидать "Введите пароль шифрования:"
отправить "pass1 \ r"

spawn ssh -Y bar@foo.org
ожидайте "пароль bar@foo.org:"
отправить "pass2 \ r"
!

так что вы получите `curl Http: // ipecho.net / plain` обрабатываться оболочкой.

Scott
источник