2016-12-20 2 views
2

Вот ситуацияBash - знать, если SSH туннель был создан правильно

Я свой компьютер, названный MY_COMPUTER машина по имени REMOTE_VM, на котором у меня есть пользователь remoteuser, который имеет в /etc/passwd оболочку /bin/false

У этого пользователя есть только одна функция, которая делает SSH-туннель, чтобы иметь возможность делать после обратного SSH.

команда В настоящее время я использую

ssh \ 
    -nNT \ 
    -R 42242:127.0.0.1:22 \ 
    [email protected]_VM 

Я хотел бы эту команду, которая будет выполняться в сценарии и есть способ, чтобы получить обратный вызов или способ (например, поставив эту команду SSH в фоновом режиме и сделать периодическая проверка существования файла сокета или что-то в этом роде), чтобы проверить, действительно ли соединение открыто, а не просто ожидает соединения в случае медленной сети.

Есть ли такой способ с openssh-клиентом, или вы должны пойти с пользовательской реализацией клиента ssh, чтобы вы могли поместить свой обратный вызов, если хотите?

Я бы предпочел как можно больше (даже грязное) решение с простым openssh-клиентом и bash.

+0

Я думаю, что тестирование для процесса ssh должно быть все, что вам нужно – Arkadiy

+1

@Arkadiy, но соединение все равно может быть отрицательным, поэтому вы знаете только, что он не прошел, если процесс больше не запущен, но этот процесс продолжается. не уверены, что соединение установлено –

ответ

1

Запустите команду, скопировав вывод, затем проверьте, что вывод указывает, что сеанс установлен? Вдоль линии:

TMPFILE=$(mktemp) 
2>"$TMPFILE" ssh -v -nNT -R 42242:127.0.0.1:22 [email protected]_VM & 
grep 'debug1: Entering interactive session.' "$TMPFILE" 

В качестве альтернативы, возможно, вы могли бы опрашивать выход netstat.

+0

спасибо, на самом деле это похоже на не то грязное решение :) –

Смежные вопросы