http://support.microsoft.com/kb/110139
http://www.sql-server-citation.com/2009/08/how-to-get-rid-off-from-transaction-log.html - хорошее объяснение включая справку (управляет для анализа и т.д.),
;) весело проведите время. Серьезно - необходимо сделать некоторый анализ теперь.
Вызов сценария 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».
Когда вы перезапускаете демон 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 , поэтому, если вы сделаете ошибку, вы сможете повторно подключиться и повторно подключите этот сеанс экрана .
Или я неправильно понял вопрос.
Если вы хотите знать, какой из 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
!
Вот сценарий, который я написал, который завершит все сеансы 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