SSH перезапускают и уничтожают экземпляры?

http://support.microsoft.com/kb/110139

http://www.sql-server-citation.com/2009/08/how-to-get-rid-off-from-transaction-log.html - хорошее объяснение включая справку (управляет для анализа и т.д.),

;) весело проведите время. Серьезно - необходимо сделать некоторый анализ теперь.

4
задан 30 August 2011 в 12:29
4 ответа

Вызов сценария init.d все равно должен перезапустить службу:

dermot@porkboy:~$ sudo /etc/init.d/ssh restart
[sudo] password for dermot:
Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service ssh restart

Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the stop(8) and then start(8) utilities,
e.g. stop ssh ; start ssh. The restart(8) utility is also available.
ssh stop/waiting
ssh start/running, process 4877
dermot@porkboy:~$

'service ssh restart' здесь отлично работает (11.04). Стоит отметить, что перезапуск sshd не уничтожит существующие сеансы SSH . Когда вы входите в ящик через SSH, sshd порождает новые процессы для обработки сеанса. Перезапуск sshd убьет основной процесс демона sshd (и, очевидно, запустит его снова), но оставит нетронутыми другие порожденные экземпляры sshd. Вам нужно такое поведение, потому что оно значительно облегчает жизнь при работе с автономными серверами в удаленных центрах обработки данных!

Теперь, чтобы ответить на оставшийся вопрос. Вместо того, чтобы запускать 'ps -A', попробуйте следующее:

dermot@porkboy:~$ ps -ef | grep ssh
root      2522     1  0 Aug29 ?        00:00:00 sshd: dermot [priv]
dermot    2615  2522  0 Aug29 ?        00:00:04 sshd: dermot@pts/0
root      4655     1  0 10:52 ?        00:00:00 sshd: dermot [priv]
dermot    4756  4655  0 10:52 ?        00:00:00 sshd: dermot@pts/1
root      4887     1  0 10:55 ?        00:00:00 /usr/sbin/sshd -D

Это, вероятно, учитывает три процесса sshd, которые вы видите - один для основного демона sshd, а затем два (родительский родительский элемент, дочерний дермот) за сеанс. Я' m SSHed вход из двух мест o У меня пять процессов. Бит pts / X относится к виртуальному терминалу, к которому подключен сеанс, поэтому ...

dermot@porkboy:~$ who
dermot   pts/0        2011-08-29 21:32 (williams-mb.local)
dermot   pts/1        2011-08-30 10:52 (192.168.253.109)

... дает нам некоторое представление о том, какой сеанс является каким. Так что, если бы я хотел убить сеанс со своего MacBook, я бы «убил -9 2522».

12
ответ дан 3 December 2019 в 02:27

Когда вы перезапускаете демон SSH с помощью

sudo /etc/init.d/ssh restart

или

service ssh restart

, слушающий демон перезапускается с новыми параметрами конфигурации (я предполагаю, что вы перезапустите его, чтобы новая конфигурация вступила в силу). Все уже открытые сеансы продолжают работать со старой конфигурацией. Чтобы узнать, какой из сеансов ssh принадлежит вам, попробуйте выполнить:

ps -ef | egrep '(ssh|PID)'

Вы получите один / usr / sbin / sshd с PPID 1 и UID root . Это демон прослушивания. Все остальные записи sshd: user @ pts / 0 являются пользовательскими сеансами. Найдите подходящий сеанс по имени пользователя и завершите процесс, чтобы завершить этот сеанс.

Я бы рекомендовал сделать все это в сеансе GNU screen , поэтому, если вы сделаете ошибку, вы сможете повторно подключиться и повторно подключите этот сеанс экрана .

Или я неправильно понял вопрос.

1
ответ дан 3 December 2019 в 02:27

Если вы хотите знать, какой из sshd принадлежит вам, то это действительно просто:

$ ps -aef --forest | egrep "(sshd|PID|David Newcomb is ace)"

UID        PID  PPID STIME TTY        TIME CMD
root      1234     1  2018 ?      00:02:13 /usr/sbin/sshd
root     30546  1234 19:54 ?      00:00:00  \_ sshd: root@pts/0
root     32069 30548 20:17 pts/0  00:00:00  |  \_ egrep (sshd|PID|David Newcomb is ace)
root     30692  1234 19:56 ?      00:00:00  \_ sshd: root@pts/1
root     31890  1234 20:16 ?      00:00:00  \_ sshd: root [priv]
sshd     32054 31890 20:16 ?      00:00:00  |   \_ sshd: root [net]
root     31891  1234 20:17 ?      00:00:00  \_ sshd: [accepted]
sshd     32065 31891 20:17 ?      00:00:00      \_ sshd: [net]

Это вы управляете egrep !

!
0
ответ дан 3 December 2019 в 02:27

Вот сценарий, который я написал, который завершит все сеансы SSH, кроме текущего (того, который запускает сценарий):

Большое спасибо Дэвиду Ньюкомбу и patrik за помощь в создании этого сценария.

#!/bin/bash

# Many thanks to stackoverflow.com user "patrik" for the following
containsElement () {
  local e match="$1"
  shift
  for e; do [[ "$e" == "$match" ]] && return 0; done
  return 1
}

SKIP_PIDS=()
ALL_PIDS=()
SESSIONS=`sudo ps -aef --forest | egrep "(sshd|__MY_ID__)"`

# Get root PIDs and add them to the skip list
ROOT_PIDS_STR=$(echo "$SESSIONS" | grep 'root' | sed -E 's/[[:space:]]+/@@@/g' | tr "\n" ' ')
ROOT_PIDS=($ROOT_PIDS_STR)

# Collect root PIDs and add them to the skip list
for LINE in "${ROOT_PIDS[@]}"; do
  LINE=$(echo "$LINE" | sed -E 's/@@@/ /g')
  PID=$(echo "$LINE" | cut -d ' ' -f 2)
  SKIP_PIDS+=($PID)
done

# Get my PID and add to the skip list
MY_PID=`echo "$SESSIONS" | grep -B 1 '__MY_ID__' | head -n 1 | sed -E 's/[[:space:]]+/ /g' | cut -d ' ' -f 2`
SKIP_PIDS+=($MY_PID)

# Get all PIDs, and only add those that aren't in the skip list
PIDS_STR=$(echo "$SESSIONS" | grep -v '__MY_ID__' | sed -E 's/[[:space:]]+/@@@/g' | tr "\n" ' ')
LINES=($PIDS_STR)

# Add all non-skip PIDs to the list of processes to kill
for LINE in "${LINES[@]}"; do
  LINE=$(echo "$LINE" | sed -E 's/@@@/ /g')
  PID=$(echo "$LINE" | cut -d ' ' -f 2)
  containsElement "$PID" "${SKIP_PIDS[@]}"

  if [ $? -ne 0 ]; then
    ALL_PIDS+=($PID)
  fi
done

# Kill all PIDs not in the skip list
for PID in "${ALL_PIDS[@]}"; do
  sudo kill -15 "$PID"
done
0
ответ дан 3 December 2019 в 02:27

Теги

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