Параметр SSH для игнорирования .bashrc сценария

Обновите 31.10.2016 о формате журнала

Некоторые сценарии для надлежащей установки

Существует полный применимый метод для отслеживания/регистрирования соединений SSH ключом с expention к имени пользователя.

Введение

В дополнение к anwer @Caleb я хотел бы совместно использовать некоторые небольшие приемы там:

Nota: я работаю над Debian 6.0.

Установка сервера

Уровень Журнала SSHD

Сначала гарантируя, что конфигурация сервера имеет достаточный уровень входа:

как корень, это установит и активный подробный вход:

sed '/^[^#]*LogLevel.*\(QUIET\|FATAL\|ERROR\|INFO\)/{s/^/# /;h;s/$/\nLogLevel VERBOSE/};${p;g;/./!{iLogLevel VERBOSE'$'\n;};D}'  -i /etc/ssh/sshd_config

Мог быть записан:

sed '
     /^[^#]*LogLevel.*\(QUIET\|FATAL\|ERROR\|INFO\)/{
        s/^/# /;
        h;
        s/$/\nLogLevel VERBOSE/
    };
    ${
        p;
        g;
        /./!{
            iLogLevel VERBOSE
        };
        D
    }'  -i /etc/ssh/sshd_config

или в sed сценарии:

#!/bin/sed -f
/^[^#]*LogLevel.*\(QUIET\|FATAL\|ERROR\|INFO\)/{
    s/^/# /;
    h;
    s/$/\nLogLevel VERBOSE/
};
${
    p;
    g;
    /./!{
        iLogLevel VERBOSE
    };
    D
}

Который мог быть выполнен как:

patchSshdConfigLogLevel.sed -i /etc/ssh/sshd_config

Чем для активации этого:

service ssh restart

Системный журнал: создание читаемого пользователя цифровых отпечатков

Теперь возьмите цифровые отпечатки в пользователе читаемый файл:

echo ':msg, regex, "Found matching .* key:" -/var/log/sshdusers.log' \
    > /etc/rsyslog.d/ssh_key_user.conf 
echo ':msg, regex, "Accepted publickey for" -/var/log/sshdusers.log' \
    >> /etc/rsyslog.d/ssh_key_user.conf 

service rsyslog restart

Попробуйте к (пере-) вход в систему от ssh для обеспечения нового файла sshdusers.log создается (и содержите что-то), затем

chmod 644 /var/log/sshdusers.log

Использование

Это распечатает цифровой отпечаток текущих сессий:

sed -ne "/sshd.$PPID.:.*matching .SA key/{s/^.* //g;h};\${x;p}" /var/log/sshdusers.log

sed -ne "/sshd.\($(($(ps ho ppid $PPID)))\|$PPID\).:.*\(Accepted publickey\|matching .SA key\)/{s/^.* //g;h};\${x;p}" /var/log/sshdusers.log

Плагин для .bashrc

И наконец, существует немного дополнения для помещения в конце Вашего /etc/bash.bashrc или пользователь .bashrc :

ssh_oPwd=$OLDPWD
ssh_oUmask=$(umask)
umask 077
ssh_tempdir=$(mktemp -d /tmp/ssh-id-XXXXXXX)
cd $ssh_tempdir || exit 1

ssh_crtFp=$(
    sed -ne "/sshd.\($(($(ps ho ppid $PPID)))\|$PPID\).:.*\(Accepted publickey\|matching .SA key\)/{s/^.* //g;h};\${x;p}" /var/log/sshdusers.log
)
for ((ssh_i=1;ssh_i<=$(wc -l <$HOME/.ssh/authorized_keys);ssh_i++));do
    export ssh_line="$(sed -ne ${ssh_i}p <$HOME/.ssh/authorized_keys)"
    echo "$ssh_line" >tempKey
    export ssh_lFp=($(ssh-keygen -l -f tempKey))
    if [ "${ssh_lFp[1]}" == "$ssh_crtFp" ] ;then
        export SSH_KEY_USER=${ssh_line##* }
        break
      fi
  done

cd $OLDPWD
OLDPWD=$ssh_oPwd
rm -fR $ssh_tempdir
umask $ssh_oUmask
unset ssh_lFp ssh_line ssh_i ssh_crtFp ssh_tempdir ssh_oUmask ssh_oPwd

таким образом, после перевхода в систему от SSH, Вы будете видеть:

set | grep ^SSH
SSH_CLIENT='192.168.1.31 43734 22'
SSH_CONNECTION='192.168.1.31 43734 192.168.1.2 22'
SSH_KEY_USER=user@mydesk
SSH_TTY=/dev/pts/2

Nota На некоторой установке, авторизованный файл ключей, возможно, что-то по-другому названное, как $HOME/.ssh/authorized_keys2...

8
03.11.2013, 20:59
3 ответа

Вы могли активировать части Вашего .bashrc только если это не вызывается через ssh.

например, что-то как:

# within an SSH-session, ${SSH_TTY} will be set
if [ "x${SSH_TTY}" = "x" ]; then
  /bin/watch ~/checker.bash
fi
5
27.01.2020, 20:09
  • 1
    работал как очарование, и все ответы здесь учили меня много. Очень ценивший! –  ljs.dev 03.11.2013, 22:10

Два пути:

Не используйте удар для этой сессии, попробуйте тире (или/bin/sh):

ssh 127.0.0.1 /bin/dash

Используйте удар с опциями команды отключить файлы запуска обработки:

ssh 127.0.0.1 "bash --noprofile --norc"
13
27.01.2020, 20:09
  • 1
    Вы попробовали свои пути? (особенно № 2)? –  umläute 03.11.2013, 21:19
  • 2
    2-й метод просто зависает для меня. –  slm♦ 03.11.2013, 22:28
  • 3
    Второй метод работает отлично на меня. Вы не видите подсказку, так как PS1 не установлен, который является побочным эффектом выполнения согласно просьбе. –  Dan Garthwaite 06.11.2013, 19:49
  • 4
    оба просто подвешивает для меня –  Aditya Mittal 08.01.2017, 01:41
  • 5
    @AdityaMittal, который Оба, будет казаться, будут подвешивать, если Вы вызовете интерактивную сессию, потому что существует подсказка № PS1. Попытайтесь ввести 'ls /' –  Dan Garthwaite 09.01.2017, 17:35

Можно заменить строкой/bin/watch.... с

 if ps ax | grep /bin/watch | grep -v grep  > /dev/null 2>&1
 then
    echo "Nothing to do"
 else
    /bin/watch ~/checker.bash
 fi

или некоторая такая вещь.

2
27.01.2020, 20:09
  • 1
    хорошо, большой. В этом экземпляре у меня может быть несколько оболочек, работающих watch команда, но мне нравится решение. –  ljs.dev 03.11.2013, 22:11

Теги

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