Возможности ssh в Linux
Использование графических программ удаленного компьютера
В конфиге ssh /etc/ssh/sshd_config необходимо включить систему X11
X11Forwarding yes
После перезапустить сервер ssh
В отличии от удаленного сервера на клиенте должен быть установлен X11
sudo apt install xorg openbox
На сервере должен быть установлен как минимум xauth ( для конфигурации Xauthority)
Xauthority - этоsudo apt install xauth
Чтобы использовать графические программы удаленного хоста, необходимо подключиться используя опцию -X
ss-X toly@10.1.0.107 virtualbox
Редактирование файлов через ssh
vim scp://root@192.168.61.171//root/nodemail.sh
Здесь используется двойной слэш // вместо :/path/path/....
Файл копируется в /tmp локальной машины, после редактирования выгружается в удаленную дирректорию, по словам автора статьи, такой фокус работает только в linux
Сравнение файлов между серверами
ssh root@192.168.61.171 "cat /etc/ssh/sshd_config" | diff - /etc/ssh/sshd_config
Здесь используется вывод команды cat на удаленной машине, который передается утилите diff через конвейер(труба) в качестве второго параметра, для этой возможности используется оператор '-'
Второй способ реализации:
diff /etc/ssh/sshd_config <(ssh root@192.168.61.171 "cat /etc/ssh/sshd_config")
Сравнение файлов между двумя удаленными серварами:
diff <(ssh root@192.168.61.171 "cat /etc/ssh/sshd_config") <(ssh root@95.165.5.82 -p 2222 "cat /etc/ssh/sshd_config")
Однако этот способ потерпит неудачу, если для входа на сервера потребуется пароль
VNC через SSH
VNC - это система удаленного доступа к рабочему столу через протокол RFB
Вместо VNC в примере используется прокол RDP и утилита xrdp, установленная на сервере и клиенте
Создание туннеля через ssh:
ssh toly@10.2.2.121 -L 3000:localhost:3389
Обратный трафик через ssh туннель будет поступать с порта 3389 удаленной машины на порт 3000 локальной машины
Теперь можно запустить rdp(vnc) клиент на локальной машине используя localhost:3000
xfreerdp /f /u:toly /p:passw12345 /v:localhost:3000
После успешного подключения должен появиться рабочий стол удаленного хоста
Сохранение выполнения команды при закрытии соединения
Программа подобная bash при заупуске использует набор скриптов для создания своего рабочего окружения.
При подключениии по ssh к другому пользователю удаленной машины, создается псевдотерминал, который подключается к оболочке с входом Login shell
Есть еще без входа в оболочку non login shell
Чтобы увидеть какой тип входа используется в данный момент:
~$ echo $0
-bash
Перед названием используемой оболочки стоит знак '-' , это говорит о том, что для входа используется login shell
login shell - предлагает пользователю войти в систему, используя /bin/login/ и /etc/passwd, это первый процесс, который выполняется от id текущего пользователя
Процесс входа вызывает /etc/profile и ~/.bash_profile
/etc/profile вызывает скрипты /etc/profile.d/
~/.bash_profile вызывает ~/.bashrc
~/.bashrc вызывает /etc/bashrc
toly@host:~$ /bin/login
login: невозможно выполнить без прав суперпользователя
toly@host:~$ sudo /bin/login
[sudo] пароль для toly:
host имя пользователя: toly
Пароль:
Последний вход в систему: Вс окт 9 17:33:47 MSK 2022 с 10.0.2.101 на pts/5
toly@host:~$ exit
выход
toly@host:~$
Loin shell включает в себя следующие возможные случаи:
su -
su -l
su --login
su USERNAME -
su -l USERNAME
su --login USERNAME
sudo -i
non login shell - не связан с входом пользователя в систему, при его использовании выполняются шаги:
Вызывается ~/.bashrc
~/.bashrc вызывает /etc/bashrc
/etc/bashrc вызывает скрипты /etc/profile.d
При внезапном закрытии соединения ssh, выполнение команды на удаленном сервере будет остановлено, псевдотерминал и все процессы, которые родились в псевдотерминале получают сигнал SIGHUP и принудительно закрываются, отсюда вопрос, как сделать так, чтобы выполнение команды не останавливалось и можно было посмотреть ее статус выполнения на удаленном сервере при повторном подключении?
Есть несколько вариантов решения:
1. Использование мендежера оконных окон screen или tmux
2. Использование команды nohup. С помощью этой команды процесс выполняется в фоновом режиме игнорируя сигналы SIGHUP, продолжая свое выполнение как демон, таким образом можно отключиться от удаленной машины
$ nohup find / -name test.txt &
[1] 14686
nohup: ввод игнорируется, вывод добавляется в '/home/toly/nohup.out'
toly@host:/etc$ fg 1
nohup find / -name test.txt
3. Использование команды disown
toly@mega:~$ ping google.com > pingout &
[1] 15226
toly@mega:~$ jobs -l
[1]+ 15226 Запущен ping zalinux.ru > pingout &
toly@mega:~$ disown -h %1
toly@mega:~$ ps -ef | grep ping
gdm 1364 1216 0 10:25 tty1 00:00:00 /usr/libexec/gsd-housekeeping
toly 1728 1574 0 10:28 tty2 00:00:00 csd-housekeeping
toly 15226 5453 0 14:18 pts/1 00:00:00 ping zalinux.ru
toly 15244 5453 0 14:19 pts/1 00:00:00 grep --color=auto ping
6. Использование команды setsid
В следующем примере процесс sleep отключается от контролируемого терминала, поэтому при закрытии терминала, процесс будет продолжать свою работу:
setsid sleep 10m
ps -ef | grep sleep
~$ ps -ef | grep sleep
toly 15820 1538 0 14:26 ? 00:00:00 sleep 10m
toly 15910 15833 0 14:27 pts/3 00:00:00 grep --color=auto sleep
sshfs
sshfs - сетевая файловая система, позволяет монтировать удаленную файловую систему используя протокол sftp и fuse (filesystem userspace - файловая система в пространстве пользователя)
fuse - это файловая система в пространстве пользователя, которая позволяет монтировать систему с правами обычного пользователя
Для использования sshfs:
sudo apt install sshfs fuse
Для монтирования удаленного каталога используется следующий синтаксис:
sshfs ПОЛЬЗОВАТЕЛЬ@УДАЛЁННЫЙ-ХОСТ:/ДИРЕКТОРИЯ/УДАЛЁННОГО/ХОСТА ТОЧКА-МОНТИРОВАНИЯ
При необходимости можно указать порт через опцию -p в конце команды
Более подробное описание команды здесь
Источники
Связанные темы
Конфигурация vsftpd в ОС Linux Ubuntu
Установка и конфигурация samba в Linux
Конфигурация openvpn сервера в Linux Alpine
Использование iptables в linux
Базовые понятие о настройках и безопасности в сети
Использование ifconfig в Linux
Настройка openvpn сервера в Linux
Полезные сетевые утилиты Linux
Использование fail2ban в Linux
Конфигурация сети в Alpine Linux