Как стать автором
Обновить

Комментарии 23

Пожалуй один совет: Если у Вас множество серверов, то Ansible Вам в помощь и не нужно придумывать велосипед.
это может быть множество очень разных серверов очень разных проектов и людей, которые вот совсем не надо покрывать одним и тем же ансиблом
Разные сервера, разных проектов и людей — категорически не рекомендовал бы объединять bash_history
Пожалуйста обратите внимание, что косолидируется не та история, которая доступна команде history или используется по нажатию ctrl-r. Возможно я неудачно сформулировал, потому что я собираю лог комманд, который включает кроме команды время исполнения и рабочую директорию.
Прошу прощения, надо было явно указать, что я испльзую ssh для диагностики проблем, а не для ручного конфигурирования серверов.
  1. Не заметил нигде ничего про удаление ~/.ssh/control-socket-*. Не считаете это нужным или всё-таки как-то подчищаете за собой?
  2. "$ssh placeholder..." Какой сакральный смысл несёт placeholder? Теоретически, без этого тоже должно работать.


~/.ssh/control-socket-* подчищается автоматически ssh-ем.

placeholder нужен, без него не работает.
~/.ssh/control-socket-* подчищается автоматически ssh-ем.
В какой момент? Я пробовал — у меня не подчищается.

placeholder нужен, без него не работает.
У меня работает. Где почитать про эту конструкцию?
В какой момент подчищается не знаю. Я на ubuntu 20.04, вот версия моего ssh:

OpenSSH_8.2p1 Ubuntu-4ubuntu0.1, OpenSSL 1.1.1f 31 Mar 2020

Про placeholder тоже не могу сказать ничего более определенного. На какой ОС вы пробуете и какая версия вашего ssh?
OpenSSH_8.2p1 Ubuntu-4ubuntu0.1, OpenSSL 1.1.1f 31 Mar 2020
kvt@joy:~$ ll .ssh/
total 92
drwx------  2 kvt kvt  4096 Nov 22 22:46 ./
drwxr-xr-x 36 kvt kvt  4096 Nov 22 22:47 ../
-rw-r--r--  1 kvt kvt    73 Nov 21  2018 config
-rw-------  1 kvt kvt  3414 Nov 21  2018 id_rsa
-rw-r--r--  1 kvt kvt   734 Nov 21  2018 id_rsa.pub
-rw-------  1 kvt kvt 36620 Nov 14 17:27 known_hosts
-rw-------  1 kvt kvt 34020 Jul 12 17:10 known_hosts.old
kvt@joy:~$ sshb rage.lan
kvt@rage ~ $ exit
exit
Shared connection to rage.lan closed.
kvt@joy:~$ ll .ssh/
total 92
drwx------  2 kvt kvt  4096 Nov 23 23:32 ./
drwxr-xr-x 36 kvt kvt  4096 Nov 22 22:47 ../
-rw-r--r--  1 kvt kvt    73 Nov 21  2018 config
-rw-------  1 kvt kvt  3414 Nov 21  2018 id_rsa
-rw-r--r--  1 kvt kvt   734 Nov 21  2018 id_rsa.pub
-rw-------  1 kvt kvt 36620 Nov 14 17:27 known_hosts
-rw-------  1 kvt kvt 34020 Jul 12 17:10 known_hosts.old
kvt@joy:~$

При этом в другом терминале после коннекта к rage.lan я вижу:
kvt@joy:~$ ll .ssh/
total 92
drwx------  2 kvt kvt  4096 Nov 23 23:33 ./
drwxr-xr-x 36 kvt kvt  4096 Nov 22 22:47 ../
-rw-r--r--  1 kvt kvt    73 Nov 21  2018 config
srw-------  1 kvt kvt     0 Nov 23 23:33 control-socket-hPR2WOnd=
-rw-------  1 kvt kvt  3414 Nov 21  2018 id_rsa
-rw-r--r--  1 kvt kvt   734 Nov 21  2018 id_rsa.pub
-rw-------  1 kvt kvt 36620 Nov 14 17:27 known_hosts
-rw-------  1 kvt kvt 34020 Jul 12 17:10 known_hosts.old
kvt@joy:~$ 

А почему не что-то в этом роде?

sshb() {
    $ssh -fNM "$@" "curl -O http://mylocalserver/my_bashrc; ssh --rcfile ~/my_bashrc"
}

Соединение одно, будет один лишний bash на удаленной машине, но зато именно bash, а не dash/ksh
Прошу прощения, я не понял, что вы предлагаете. С опцией -N ssh не выполняет команды, только устанавливает соединение. Можно попросить вас пояснить ваше предложение?
тогда без опции N
предлагал просто положить bashrc на доступный всем сервер.
После подключения первым делом скачивать его на удаленную машину уже на ней, и запускать еще один bash уже с этим профайлом. Таким образом не нужно делать два подключения (для копирования конфига и подключения с конфигом)
Если мы установили ssh соединение (которое мультиплексировано, так что 2-х подключений не происходит, я отметил это в статье), то мы гарантированно можем переслать конфигурацию с локальной машины. Если мы подгружаем конфигурацию откуда-то еще, то гарантии успешной скачки нет.

Но если для вас такой вариант удобнее, то его безусловно можно использовать.
ssh -S ~/.ssh/control-socket-$(tr -cd '[:alnum:]' < /dev/urandom|head -c8)
По-моему, так проще и нагляднее:
$ grep -iE '^[^#]*control' .ssh/config 
    ControlMaster auto
    ControlPersist 5
    ControlPath ~/.ssh/ssh_mux_%h_%p_%r

Если мы делаем настройки будущих ssh-сессий, то давайте это делать в конфиге клиента ssh, а не разбрасывать по всем возможным файлам инициализирующим наш профиль.
а с putty есть вариант?
К сожалению с putty я не работаю.
Сюда бы еще и свой .vimrc прикрутить в комплекте :)
Это абсолютно реально сделать. Просто добавьте вот эту строчку
$ssh placeholder "cat >~/.vimrc" < .vimrc

перед запуском интерактивного баша.
Если я правильно понял то как-то так? Но у меня не сработало.
sshb() {
    local ssh="ssh -S ~/.ssh/control-socket-$(tr -cd '[:alnum:]' < /dev/urandom|head -c8)"
    $ssh -fNM "$@"
    $ssh placeholder "cat >~/.bash-ssh" <~/.bashrc
    $ssh placeholder "cat >~/.vimrc" < .vimrc
    $ssh "$@" -t 'SHELL=~/.bash-ssh; chmod +x $SHELL; bash --rcfile $SHELL -i'
    $ssh placeholder -O exit >/dev/null 2>&1
}
Прошу прощения, вот так:
$ssh placeholder "cat >~/.vimrc" < ~/.vimrc

Надо явно указать, что .vimrc берется из корня домашней директории.

Сложновато. Но интересно. Спасибо. Сам пользовать не буду из за сложности, я попсарь. Но иногда хороший джаз в хорошем исполнении замечательно ложится. ;-))

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории