Juniper QFX5100 доступ по SSH

Возникла проблема с доступом к Juniper QFX5100 через SSH — если проверять телнетом, то сессия открывается, но ssh-клиент не подключается, просто висит на этапе подключения до истечения таймаута.

Проблема решилась указание определённых опций в конфиге ssh-клиента, например таких:
host sw-j1 10.0.0.1
        PubkeyAcceptedKeyTypes +ssh-dss
        HostKeyAlgorithms=+ssh-dss
        KexAlgorithms ecdh-sha2-nistp256


Но оказалось, что на компьютере со старой операционной системой такие опции не подходят. Подошли вот такие:
host sw-j1 10.0.0.1
        HostKeyAlgorithms=ssh-rsa
        KexAlgorithms ecdh-sha2-nistp256


Прописать их можно сразу для всех в файле /etc/ssh/ssh_config или же каждый может прописать их индивидуально в файле ~/.ssh/config

Для интереса можно посмотреть дебаг, который выводит ssh-клиент указывая ему опцию -v или даже -vv.

Juniper: Мелочи

syslog

Включать в лог название категории (Facility) и уровень детальности (Severity):
set system syslog host syslog.tld.kg explicit-priority


Вот уровни детальности:
0 emergency
1 alert
2 critical
3 error
4 warning
5 notice
6 info
7 any

Пример:
Jul 10 19:45:07 212.42.96.132 mx inetd[12468]: %DAEMON-4: /usr/sbin/sshd[97698]: exited, status 255

Регулярные выражения

Понятно, что можно использовать регулярные выражения при выборке из какого-либо вывода через команду match, например:
user@juniper> show interfaces xe-2/3/3 | match "Input|Output"
  Input rate     : 0 bps (0 pps)
  Output rate    : 0 bps (0 pps)


Или найти сразу несколько нужных номеров вланов:
user@juniper> show configuration vlans | display set | match " (6|10|50|250|500)$"


А может, выбрать строки, начинающиеся с четырёх шестнадцатиричных значений (ipv6-пиры):
show bgp summary | match "^[0-9a-f]{4}"

Или вот так:
show bgp summary | match "^[0-9a-f]+:"


Состояния определённых интерфейсов:
show interfaces  terse | match "xe-(1/2/0|1/3/0|2/1/3|2/2/1|2/3/0)"   
xe-1/2/0                up    down
xe-1/3/0                up    up
xe-2/1/3                up    down
xe-2/2/1                up    down
xe-2/3/0                up    up


Однако, регулярные выражения можно использовать и в самих командах, например:
user@juniper> show interfaces xe-[23]/3/[01] terse
Interface               Admin Link Proto    Local                 Remote
xe-2/3/0                up    down
xe-2/3/1                up    down
xe-3/3/0                up    down
xe-3/3/1                up    down


Или вот так:
user@juniper> show interfaces ge-0/0/4[1-5] descriptions     
Interface       Admin Link Description
ge-0/0/41                  RESERVED
ge-0/0/42       up    up   Computer-1
ge-0/0/43       up    up   Computer-2
ge-0/0/45       up    up   Router-1


Информация о трансивере, например, уровень приёма:
show interfaces diagnostics optics xe-2/0/1


Копирование файлов из одного Routing Engine в другой

У каждого Routing Engine свои диски, так что все изменения с файлами, которые мы делаем на мастере, отсутствуют на бэкапе.

Перейти в _другой_ RE можно при помощи вот этой команды:
request routing-engine login other-routing-engine
Или же можно явным образом указать master или backup:
request routing-engine login master
request routing-engine login backup

Работать с файлами из cli можно, хоть и не очень удобно, например, вот так я создал папку на бэкапе и скопировал туда файлы с мастера:
file make-directory re1:/var/home/test/bin
file copy /var/home/test/bin/* re1:/var/home/test/bin

Juniper: Настройка автоматического копирования конфига при коммите

Конфиг роутера Juniper будем сохранять через scp, причём подключаться будем при помощи публичного ключа, а не пароля.
На сервере заводим пользователя juniper.
На роутере из-под пользователя root генерируем ключи:
>start shell
% su -
% ssh-keygen -t rsa -b 4096
cat /root/.ssh/id_rsa.pub


Обращаю внимание, что именно из-под пользователя root, а не из-под обычного пользователя, под которым вы вошли на роутер.

Полученный публичный ключ сохраняем в одну строку на сервере в папке пользователя juniper (в файле /home/juniper/.ssh/authorized_keys):
ssh-rsa AAAA...[очень много символов]... user@router


Теперь собственно автоматическое копирование конфига при коммите:
set system archival configuration transfer-on-commit
set system archival configuration archive-sites "scp://juniper@10.1.1.11/home/juniper"


Конфиги копируются в домашнюю папку юзера juniper /home/juniper:
router_20180303_072352_juniper.conf.gz
router_20180303_072625_juniper.conf.gz


Если на роутере несколько IP-адресов и вы хотите, чтобы по-умолчанию трафик исходил от адреса интерфейса lo0.0, то нужно сделать вот такие настройки:
set interfaces lo0 unit 0 family inet address 10.1.1.2/32 primary
set system default-address-selection


Указанные настройки влияют не только на копирование по scp, так что после коммита, не закрывая текущую сессию, проверьте доступность роутера открыв новую сессию )

Дополнение.

Если про комите выдаётся ошибка:
[edit security]               
  'ssh-known-hosts'           
    warning: statement has no contents; ignored

То нужно ввести ключ хоста, с которого мы подключаемся, в секции security — security: можно вручную, можно запросить с сервера, а можно импортировать его из уже созданного системой роутера. Лично мне последний вариант показался наиболее логичным:
set ssh-known-hosts load-key-file /var/home/user/.ssh/known_hosts