терминал администратора


Общеизвестно, что администратор работает из консоли, но чаще всего из её эмулятора — терминала.

В этой заметке я постараюсь рассказать, как у меня настроен терминал и дополнительные средства для максимально удобной и быстрой работы.

Конечно очевидно, что мои настройки сугубо индивидуальны и не претендуют на звание самых лучших или самых удобных, я просто решил поделиться ими, в надежде сократить кому-то время настройки его рабочего окружения.

Терминал

Для начала остановим свой выбор на терминале.

Выбор терминала зачастую зависит от вашего десктопного окружения. Я, например, пользуюсь XFCE 4 и решил не менять стандартный терминал xfce4-terminal, хотя он и уступает некоторым другим терминалам в гибкости настроек и количестве функций.

Рекомендую обратить внимание на terminator, konsole, gnome-terminal и guake.

Первым делом нужно подобрать хороший моноширинный шрифт и цветовую гамму.

У меня стоит шрифт Anonymous Pro 10pt на разрешении в 1366*768 и 11pt на 1920*1080

Цветовая схема — немножко измененная white on black.

Также советую настроить комбинации клавиш. Например, я настроил переключение между вкладками (Ctrl+left arrow, Ctrl+righ arrow), закрытие вкладки (Ctrl+w), переименование вкладки (Ctrl+t). Остальное оставил по умолчанию.

Bash

Кто-то использует стандартный bash, кто-то более продвинутый zsh, а кто-то может и sh.

Лично я ленивый и не стал учить zsh, поэтому пользуюсь тем, что идет в стандартной поставке практически всех дистрибутивов — bash.

Ниже привожу мой текущий .bashrc с комментариями на английском, надеюсь, что ничего объяснять не надо.

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

# don't put duplicate lines in the history. See bash(1) for more options
# ... or force ignoredups and ignorespace
HISTCONTROL=ignoredups:ignorespace
# append to the history file, don't overwrite it
shopt -s histappend
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=9000
HISTFILESIZE=9999
# Write history on every command so it will be available in all sessions after execution
export PROMPT_COMMAND='history -a'

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize

# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color) color_prompt=yes;;
esac

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
  # We have color support; assume it's compliant with Ecma-48
  # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
  # a case would tend to support setf rather than setaf.)
  color_prompt=yes
    else
  color_prompt=
    fi
fi

if (( $UID == 0 )); then
    PS1='\[\e[1;31m\]\u\[\e[m\]@\[\e[1;32m\]\h\[\e[m\]:\[\e[1;33m\]\w\[\e[m\]\$\[\e[0m\] '
else
    PS1='\[\e[1;32m\]\u\[\e[m\]@\[\e[1;32m\]\h\[\e[m\]:\[\e[1;33m\]\w\[\e[m\]\$\[\e[0m\] '
fi

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
    #alias dir='dir --color=auto'
    #alias vdir='vdir --color=auto'

    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
fi

# some more aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
alias cd..='cd ..'
alias pssh="parallel-ssh"

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi

export EDITOR="/usr/bin/vim"
export http_proxy=""
export PATH=$PATH:.:/usr/sbin:/sbin:
export SCREENRC=$HOME/.screenrc

# Key bindings
# Move word forward Ctrl + F
bind '"\C-f": forward-word'
# Move word backwards Ctrl + B
bind '"\C-b": backward-word'

# Automatically set screen window title
if [ "$TERM" = "screen" ]; then
    screen_set_window_title () {
        printf '\ek%s\e\\' "$USER@$HOSTNAME"
    }
    PROMPT_COMMAND="screen_set_window_title; $PROMPT_COMMAND"
fi

SSH

SSH — самая используемая программа в системном администрировании UNIX-based систем.

Я хожу на все администрируемые машины по беспарольному ключу. Не самый безопасный метод, но зато очень удобно.

Практически все администрируемые машины находятся во внутренней сети, поэтому за безопасность можно особо не тревожиться, тем более, что ей занимаются спецы.

Я настроил ~/.ssh/config так, чтобы ключ прозрачно пробрасывался на сервер, с которым я соединился и с него можно было дальше по цепочке ходить на другие сервера, не сохраняя на каждом файл ключа.

Это тоже не очень безопасный вариант, т.к. пользователь, имеющий доступ к файлу сокета ssh, сможет зайти под вашим пользователем на другие машины, где разрешен вход с вашим ключом. Но будем считать, что на наших машинах нет злонастроенный пользователей, а только добрые коллеги.

За эту настройку отвечает опция ForwardAgent yes

Ключ можно сгенерировать вот такой командой:

ssh-keygen -q -t rsa -b 1024 -P '' -f /tmp/ssh.id.rsa

В папке /tmp создастся два файла: ssh.id.rsa и ssh.id.rsa.pub

Для того, чтоб работала переадресация ssh агента, нужно добавить новый ключ в ssh-agent:

ssh-add /tmp/ssh.id.rsa

Также неплохо добавить следующие опции в ваш ssh config

KeepAlive yes

ServerAliveInterval 600

Они позволяют избежать разрывов при кратковременной потери связи.

Больше подробностей можно посмотреть в man ssh_config

Screen

Достоин отдельной статьи, но у меня совсем крошечная настройка, поэтому вмещу его сюда.

Я вообще недавно начал пользоваться screen, до этого просто плодил вкладки. Но захотелось большего удобства и надоело каждый раз запускать скрипты или вручную подсоединяться к хостам и начинать сессию заново, а также запускать особо важные команды через nohup.

Статья по комбинациям клавиш написана здесь. Я лишь изменил командную клавишу на Ctrl+X и сделал другую статусную строку. Ну и в bashrc настроил автоизменение заголовка окна. bashrc разносится по всем серверам с помощью puppet.

escape ^Xx
startup_message off
altscreen on
autodetach on
defscrollback 5000
vbell off
# 256 colors
caption always "%{= kw}%-w%{= BW}%n %t%{-}%+w %-= @%H - %LD %d %LM - %c"
attrcolor b ".I"
termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'
defbce on

Ну и пару слов о комбинациях, CK — командная клавиша screen, если не меняли, то Ctrl+A

CK+S — разделить область экрана на два горизонтальных;

(иногда CK+V) на два вертикальных;

CK+\ закрыть screen и все окна;

CK+Tab переключиться между разделенными областями экрана.