Как сохранить сеанс SSH для динамической переадресации и завершить его по желанию?

Параметр -iозначает, что curl будет включать заголовки ответа http, которые не в формате JSON. Это то, что вызывает вашу ошибку синтаксического анализа, однако, учитывая предоставленный вами json, вам нужно использовать [], чтобы сообщить ему об итерации массива:

curl 'https://api.shodan.io/shodan/alert/info?key={API KEY}' | jq '.[].id'

альтернативно (и ИМО более интуитивно )с использованием json:

curl 'https://api.shodan.io/shodan/alert/info?key={API KEY}' | json -a id

Кроме того, json (1 )имеет параметр -Hдля игнорирования заголовков ответов http, поэтому вы можете использоватьjson -Ha id

0
07.02.2019, 05:42
2 ответа

Помимо того, что написал @PhilipCouling, существует странная, но эффективная небольшая утилита, Spinner, полезная, когда интерактивный сеанс терминала должен оставаться открытым. Вы запускаете его на удаленном хосте. Он мало что делает, но отправляет фиктивный пакет данных обратно локальному клиенту каждые N секунд (Я использую N = 120, например ). Манекен поддерживает связь.

Не уверен, что вы хотели именно этого, но вот оно.

1
28.01.2020, 02:18

Простые улучшения

Этот метод позволяет разорвать соединение с удаленной машины. Я бы предложил пару изменений

  • Добавьте sleepв цикл while, нет смысла тратить процессорное время на ожидание
  • Инвертировать процесс. Коснитесь файла в начале и удалите его, чтобы закрыть сеанс. Это дает вам возможность включить PID в файл, если хотите.

Вам это нужно?

Если вы хотите только убить сеанс, я бы избегал метода в вашем вопросе и использовал:

SSH -N -D $port $SSH_HOST &

Это установит соединение без оболочки, поскольку фоновая задача(-Nотключает оболочку и &делает ее фоновой задачей ).

Вы можете получить (локальный )PID для этого с помощью $!и убить его с помощьюkill

Например:

SSH -N -D $port $SSH_HOST &
TUNNEL_PID=$!

# Do some other stuff

kill $TUNNEL_PID
3
28.01.2020, 02:18

Теги

Похожие вопросы