w
читает /var/run/utmp
, чтобы узнать, кто вошел в систему и откуда он вошел. Записи utmp
обновляются, когда пользователь входит или выходит из системы.
Если нет DNS или /etc/hosts
записи для IP во время входа пользователя, то поле имени хоста в utmp
остается пустым в процессе входа (sshd в данном случае).
Когда вы вышли из системы и вошли снова после добавления записи /etc/hosts
, sshd
выполнил поиск по IP и на этот раз нашел имя хоста, поэтому смог добавить правильные данные в поле hostname в utmp
.
смотрите man 5 utmp
для подробностей о формате файла /var/run/utmp
Благодаря комментарию от GAD3R иConnman
списку рассылки разработчиков друг выяснил, как настроить VPN-подключение. Хотя все еще существует небольшая ошибка, в основном она работает.
1. Исходная ситуация
Следующие пакеты должны быть установлены на вашем клиентском компьютере, откуда вы хотите получить доступ к хост-серверу:
connman
connman-vpn
cmst
openconnect
Кроме того, скрипт csd-wrapper.sh
был запущен в каталоге ваших клиентов/home
-и создал каталог /home/.cisco
с несколькими файлами аутентификации вашей машины.
2. Создание необходимой информации для аутентификации VPN с помощьюOpenConnect
На втором этапе необходимо выполнить запрос аутентификации OpenConnect
, чтобы получить сертификат сервера(FINGERPRINT
)и COOKIE
, который Connman
будет использовать для подключения к VPN. Эта информация будет создана с использованием пакета OpenConnect
, который позже отображает сертификат сервера и файл cookie в терминале. Мы генерируем эту информацию в терминале, запустив
$ sudo openconnect --csd-wrapper=/home/user/.cisco/csd-wrapper.sh --authenticate --user <username> <hostname>
После этого эта команда отобразит четыре переменные :POST
, COOKIE
, HOST
и FINGERPRINT
. Таким образом, отпечаток (, начинающийся с sha256:...
), действует как сертификат сервера, а COOKIE
звучит так.
3. Создание файла настройки VPN дляConnman
В отличие от NetworkManager
Connman
использует так называемые файлы подготовки VPN для каждого VPN-подключения, откуда берет информацию о том, как подключиться к хосту VPN. Поэтому на третьем этапе ранее сгенерированные данные аутентификации должны быть вставлены в этот файл настройки VPN, который Connman
будет использоваться для подключения к серверу. Для этого мы создаем файл /var/lib/connman-vpn/<connection-name>.config
на основе следующей структуры:
[global]
Name = VPN name, for example "My Company VPN" (without quotes)
[provider_openconnect]
Type = OpenConnect
Name = VPN Provider name, for example "My Company Cisco VPN" (without quotes)
Host = <VPN host IP address>
Domain = <VPN host domain>
OpenConnect.ServerCert = <paste the output of FINGERPRINT from the previous openconnect command>
OpenConnect.Cookie = <paste the output of COOKIE from the previous openconnect command>
Затем сохраните и закройте файл.
4.Перезагрузите компьютер и проверьте VPN-подключение
.Перезагрузите систему, и вы увидите созданное VPN-подключение в списке во вкладке VPN
графического интерфейса Connman System Tray (CMST
). Отметьте его, нажмите «подключиться», и через несколько секунд будет установлено соединение VPN -с вашим хостом VPN -. Теперь вы можете легко получить доступ к узлу VPN -в любом файловом менеджере по вашему выбору.
5. Моча в глазах :Сгенерированный файл cookie действителен только в течение нескольких часов
Через несколько часов ваше ранее успешно работающее VPN-подключение -больше не будет работать. При проверке /var/log/syslog
подход к подключению будет жаловаться на неудачную проверку сертификата сервера:
Aug 24 00:14:51 <hostname> connmand[444]: ipconfig state 2 ipconfig method 1
Aug 24 00:14:51 <hostname> connmand[444]: vpn0 {create} index 23 type 65534 <NONE>
Aug 24 00:14:51 <hostname> connmand[444]: vpn0 {update} flags 4240 <DOWN>
Aug 24 00:14:51 <hostname> connmand[444]: vpn0 {newlink} index 23 address 00:00:00:00:00:00 mtu 1500
Aug 24 00:14:51 <hostname> connmand[444]: vpn0 {newlink} index 23 operstate 2 <DOWN>
Aug 24 00:14:51 <hostname> connman-vpnd[365]: vpn0 {create} index 23 type 65534 <NONE>
Aug 24 00:14:51 <hostname> connman-vpnd[365]: vpn0 {update} flags 4240 <DOWN>
Aug 24 00:14:51 <hostname> connman-vpnd[365]: vpn0 {newlink} index 23 operstate 2 <DOWN>
Aug 24 00:14:51 <hostname> connmand[444]: ipconfig state 2 ipconfig method 1
Aug 24 00:14:51 <hostname> openconnect[4476]: Connected to <VPN server IP>:443
Aug 24 00:14:51 <hostname> openconnect[4476]: SSL negotiation with <VPN server IP>
Aug 24 00:14:51 <hostname> openconnect[4476]: Server certificate verify failed: signer not found
Aug 24 00:14:51 <hostname> openconnect[4476]: Connected to HTTPS on <VPN server IP>
Aug 24 00:14:51 <hostname> openconnect[4476]: Got inappropriate HTTP CONNECT response: HTTP/1.1 401 Unauthorized
Aug 24 00:14:51 <hostname> connmand[444]: vpn0 {dellink} index 23 operstate 2 <DOWN>
Aug 24 00:14:51 <hostname> connmand[444]: (null) {remove} index 23
Aug 24 00:14:51 <hostname> connman-vpnd[365]: vpn0 {dellink} index 23 operstate 2 <DOWN>
Aug 24 00:14:51 <hostname> connman-vpnd[365]: vpn0 {remove} index 23
Aug 24 00:14:51 <hostname> connmand[444]: ipconfig state 7 ipconfig method 1
Aug 24 00:14:51 <hostname> connmand[444]: ipconfig state 6 ipconfig method 1
Таким образом, начальная аутентификация-COOKIE
изменилась, поэтому ранее сгенерированный файл cookie больше недействителен. Поэтому вам придется повторять описанную выше процедуру все несколько часов, чтобы создать новый COOKIE
и вставить этот новый файл в ваш файл настройки VPN (/var/lib/connman-vpn/<yourvpnname>.config
), перезаписывая старый файл cookie. После этого перезапустите Connman
, и ваш VPN снова будет отлично работать в течение следующих нескольких часов.
Важно:
Судя по всему, NetworkManager
может сам воссоздать новый COOKIE
, в то время как Connman
нужно загрузить новый cookie
в свой файл настройки VPN. Вероятно, Connman
не хватает какого-то интерфейса для запуска командыOpenConnect
-самостоятельно.
6. Обходной путь для более удобного воссоздания нового файла cookie
Вы можете использовать сценарий bash -, чтобы создать новый файл cookie и перезаписать старый. Просто скопируйте следующий текст в файл *.sh
-, сделайте его исполняемым и запустите. Новый файл cookie будет автоматически помещен в /var/lib/connman-vpn/vpnname.config
в правильном месте. После этого перезапустите Connman
, и VPN снова будет работать нормально.
#!/bin/bash
sed -i "s/^OpenConnect.Cookie =.*$/$( echo '<YOUR-VPN-PASSWORD>' | openconnect --csd-wrapper=/home/user/.cisco/csd-wrapper.sh --authenticate --user=<USERNAME> --authgroup="<YOURGROUP>" --passwd-on-stdin <VPN-HOST-DOMAIN> | grep 'COOKIE=' | sed "s/COOKIE='//; s/'//g; s/^/OpenConnect.Cookie = /")/" <EXTERNAL-FILENAME>
Этот скрипт будет:
OpenConnect
, чтобы получить сертификат сервера(FINGERPRINT
)иCOOKIE
username
в приглашение пользователя password
в приглашение пользователя group
в приглашение пользователя cookie
cookie
в /var/lib/connman-vpn/vpnname.config
новымcookie
После этого вы можете без проблем повторно подключиться к своему хосту -VPN. Благодаря этому скрипту удобнее и быстрее воссоздавать новый cookies
при необходимости.