Using nc
(netcat
).
Сервер:
$ nc -l localhost 3000
Клиент:
$ nc localhost 3000
И сервер, и клиент будут читать и писать на стандартный вывод/ввод.
Это будет работать, если сервер и клиент находятся на одной машине. В противном случае измените localhost
на внешнее имя сервера.
Немного интереснее "сервер", который сообщает вам время суток, если вы подключитесь к нему и отправите d
, и который выходит из системы, если вы отправите q
:
Сервер (в bash
):
#!/bin/bash
coproc nc -l localhost 3000
while read -r cmd; do
case $cmd in
d) date ;;
q) break ;;
*) echo 'What?'
esac
done <&"${COPROC[0]}" >&"${COPROC[1]}"
kill "$COPROC_PID"
Клиентская сессия:
$ nc localhost 3000 d Thu Jan 12 18:04:21 CET 2017 Hello? What? q
(сервер выходит после q
, но клиент не обнаруживает, что он вышел, пока вы не нажмете Enter).
Последний журнал печатается PAM с использованием модуля pam_lastlog
. Если его нет в вашем стеке PAM в /etc/pam.d/sshd
(или в других включенных оттуда файлах), вы можете добавить такие строки, как:
session [default=1] pam_lastlog.so nowtmp silent
session optional pam_lastlog.so silent noupdate showfailed
(взято из моего /etc/pam.d/postlogin
в Fedora 25)
Убедитесь, что вы перезапустили sshd после добавления этой строки. Если он все еще не работает, попробуйте закомментировать строку и перезапустить sshd, потому что печать даты последнего входа в систему является поведением по умолчанию без этой строки. И на всякий случай, проверьте, что вы редактируете sshd_config, а не ssh_config случайно.