Рубрики
SSH

ssh xforwarding / Missing X server or $DISPLAY

Включить:
[pastacode manual=»%0D%0Avim%20%20%2Fetc%2Fssh%2Fssh_config%0D%0A————————%0D%0A%20ForwardX11%20yes%0D%0A————————%0D%0A» provider=»manual» lang=»default»/]

Ошибка «Missing X server or $DISPLAY»:
[pastacode manual=»%0D%0Assh%20-X%20user%40IPaddressORHOSTNAME%20-%20%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%0D%0Aprintenv%20DISPLAY%20-%20%D0%BF%D0%BE%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D1%8C%20%D1%82%D0%B5%D0%BA%D1%83%D1%89%D0%B8%D0%B9%20%D0%B4%D0%B8%D1%81%D0%BF%D0%BB%D0%B5%D0%B9%20%D1%81%D0%BA%D0%BE%D1%80%D0%B5%D0%B5%20%D0%B2%D1%81%D0%B5%D0%B3%D0%BE%20%D0%B2%D1%8B%D0%B2%D0%B5%D0%B4%D0%B5%D1%82%20%D0%BF%D1%83%D1%81%D1%82%D0%BE%D1%82%D1%83%0D%0Aexport%20DISPLAY%3D%24HOST_IP%3A0.0%20-%20%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D0%B0%D0%B7%D0%BD%D0%B0%D1%87%D0%B8%D1%82%D1%8C%20%0D%0Achromium%20%26%0D%0Avirt-manager%20%26%20%0D%0A» provider=»manual» lang=»default»/]

Рубрики
ssh SSH

ssh / jump / forward /proxy

Ссылки с примерами:

https://habr.com/ru/post/435546/
https://habr.com/ru/post/122445/
https://codex.so/ssh-tunnel
https://ualinux.com/ru/stream/nabor-komand-dlya-raboty-s-ssh-na-vse-sluchai-zhizni
https://www.opennet.ru/tips/1691_ssh_tunnel_socks.shtml

ssh -J:

Подключаемся к host2 через host1:
ssh -J host1 host2

Подключаемся к host4 через цепочку хостов:
ssh -J host1,host2,host3 host4

ssh -L forward port:

!!! 8080 - локальный порт
!!! 80 - порт который мы пробрасываем 
!!! serv1 - удаленный сервер на котором слушается  80 порт / можно указать localhost
ssh -L 8080:localhost:80 serv1

ssh -L цепочка подключений:

Описание:
localhost - ПК с которого мы подключаемся 
serv1 - ПК с которого доступен serv2
serv2 - ПК к которому нет доступа с localhost

Что:
Очень хочется подключится по ssh к serv2 с localhost
Но для localhost доступен только serv1

Подготовка:
Открываем две консоли:

Первая консоль:
На ПК  с которого будем подключатся запускаем выполняем
ssh -L 2222:0.0.0.0:2222 serv1
Если команда выполнилась успешно нас подключит к серверу serv1
Выполняем уже на serv1: 
ssh -L 2222:0.0.0.0:2222 serv2
Если команда выполнилась успешно нас подключит к серверу serv2
Выполняем на serv2
!!! localhost имеется введу сам сервер serv2
ssh -L 2222:0.0.0.0:22 localhost
Оставляем окно открытым, пока мы его не закрыли туннель работает

Использование:
Вторая консоль:
ssh localhost -p 2222

Проблемы:
!!! ошибка WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
!!! За чем? защищает нас от атаки (man-in-the-middle attack)
!!! но нам нужно подключится через другой хост
!!! временно игнорируем подпись хоста
vim .ssh/config 
---------------
Host localhost
  StrictHostKeyChecking no
--------------

SSH socks proxy:

0. на рабочей станции:
ssh -D 7777 user@remotehost -f -N

Опции:
-D 7777 - эмуляция SOCKS сервера через порт 7777 
-f  - работа в фоне, после аутентификации
-N - не запускать shell на удаленном хосте
user@remotehost - хост имеющий доступ в интернет

1. Приложению которому требовалось интернет указываем socks5 proxy
google-chrome --proxy-server="socks5://192.168.1.10:7777"

Дополнительно:

ssh -p2222 server9 - подключится по ssh к server9, используя порт 2222

ssh -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null user@server - подключится по ssh к server используя учетные данные user, 
                                                                                    игнорируем все предупреждения о  WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! 
ssh -o StrictHostKeyChecking=no user@host  - подключится по ssh к server используя учетные данные user, игнорируем все предупреждения IDENTIFICATION HAS CHANGED!                                                                                 

ssh user@host cat file.txt - выполнить (cat file.txt) на удаленной системе host
ssh user@host df -h - выполнить команду df -h на удаленной системе host
ssh user@host sudo reboot -  - выполнить команду sudo reboot на удаленной системе host

curl serv1:8080 - подключится к serv1 на порт 8080, если там веб сервер отобразит страницу
nc localhost 2222 - подключится к localhost на порт 2222

scp -P2222 systemrescue-8.04-amd64.iso user@serv100:  - выполнить копирование файла ystemrescue-8.04-amd64.iso из текущего каталога, используем порт 2222, ПК server100

!!! внимание для rsync использование / может привести к различным последствиям
rsync -avz /home/user/folder serv1:/home/user/folder - синхронизация /home/user/folder в serv1:/home/user/folder
rsync -avz /home/user/folder/ serv1:/home/user/folder/  - синхронизация содержимого лfolder в serv1:/home/user/folder
rsync -avz /home/user/folder serv1:/home/user/folder/ - каталог будет скопирован внутрь и мы получим на удаленном ПК /home/user/folder/folder

Пример проброса порта 80, 443, 544

Пример раз
ssh -p 2154 -L 127.0.0.1:8080:192.168.127.118:80 -L 127.0.0.1:8443:192.168.127.118:443 -L 127.0.0.1:8554:192.168.118.124:554 root@192.168.10.240
root@192.168.10.240 - ПК к которому у нас есть доступ по ssh
-p 2154 - этот порт мы используем для подключения к ПК root@192.168.10.240
127.0.0.1:8080:192.168.127.118:80 - с локального хоста пробрасываем порт 8080 на ПК 192.168.10.240 там в свою очередь этот порт пробрасываем на 192.168.127.118:80
127.0.0.1:8443:192.168.127.118:443 - с локального хоста пробрасываем порт 8443 на ПК 192.168.10.240 там в свою очередь этот порт пробрасываем на 192.168.127.118:443
127.0.0.1:8554:192.168.127.118:554 - с локального хоста пробрасываем порт 8443 на ПК 192.168.10.240 там в свою очередь этот порт пробрасываем на 192.168.127.118:544


Пример два
ssh -p 2154 -L 127.0.0.1:8080:192.168.127.124:80 -L 127.0.0.1:8443:192.168.127.124:443 -L 127.0.0.1:8554:192.168.127.124:554 root@192.168.10.240
root@192.168.10.240 - ПК к которому у нас есть доступ по ssh
127.0.0.1:8080:192.168.127.124:80 - с локального хоста пробрасываем порт 8080 на ПК 192.168.10.240 там в свою очередь этот порт пробрасываем на 192.168.127.124:80
127.0.0.1:8443:192.168.127.124:443 - с локального хоста пробрасываем порт 8443 на ПК 192.168.10.240 там в свою очередь этот порт пробрасываем на 192.168.127.124:443
127.0.0.1:8554:192.168.127.124:554 - с локального хоста пробрасываем порт 8443 на ПК 192.168.10.240 там в свою очередь этот порт пробрасываем на 192.168.127.124:544


Для подключения со своего пк просто используем  браузер
http://localhost:8080
http://localhost:8433
Рубрики
SSH

ssh — sshfs монтирование шары

Установка:

SSHFS - монтирование файловых систем средствами ssh
apt-get install sshfs - установка
mkdir /mnt/docs - создаем папку для монтирования
sshfs user@server.com:/var/docs /mnt/docs - монтируем фс используя sshfs
fusermount -u /var/docs - демонтируем удаленную папку

монтирование шары sshfs /etc/fstab:

ИМЯ@ИП:/REMOTE/DIR  /LOCAL/MOUNT  fuse.sshfs _netdev,user,idmap=user,transform_symlinks,identityfile=/home/ИМЯ/.ssh/id_rsa,allow_other,default_permissions,uid=ИД,gid=ИД 0 0

sshfs для windows:

Dokan SSHFS - монтирование удаленного сетевого хранилища при помощи ssh для Windows
https://github.com/dokan-dev/dokany/releases/tag/v1.1.0.2000

sshfs — монтирование удаленной папки подробней:


http://www.nestor.minsk.by/sr/2007/11/sr71104.html

Fuse - это модуль ядра (недавно он был принят в официальную ветку 2.6), позволяющий непривилегированным пользователям монтировать различные файловые системы. 
Sshfs - это программа, созданная самим автором fuse, которая позволяет монтировать удаленные папки или файловые системы, используя ssh. 
Суть проста - удаленная папка монтируются в папку локальной файловой системы. 
После этого все операции над этой папкой производятся, как если бы это была обычная локальная папка, с той только разницей, что файлы перемещаются через ssh в фоновом режиме. 
После установки программы остается только добавить пользователя, которому мы хотим предоставить право на монтирование файловых систем через ssh, в группу fuse

# usermod -G -a fuse user1
или
# adduser user1 fuse
или вручную отредактировав файл /etc/group. 

Также необходимо, чтобы был загружен модуль fuse:
# modprobe fuse
Если мы планируем использовать fuse и sshfs регулярно, то нужно добавить fuse в файл /etc/modules. 

sshfs user1@remote_server:/tmp ~/remote_folder - смонтировать удаленную папку с помощью sshfs
fusermount -u ~/remote_folder - мы можем отмантировать ее

Если мы постоянно работаем с этой папкой, то можно добавить ее в таблицу /etc/fstab. 
При этом она будет автоматически монтироваться при загрузки системы,
/tmp /home/user1/remote_folder/ fuse defaults,auto 0 0
Рубрики
SSH

ssh — малёк теории RSA

0) обменялись открытыми ключами
1) Отправитель шифрует сообщение с помощью открытого ключа получателя.
Этот первый шаг гарантирует конфиденциальность.
2) Отправитель снова шифрует сообщение но на этот раз с помощью своего закрытого ключа. 
Таким образом удостоверяется подлинность сообщения, оно "подписано"
3) Получатель использует открытый ключ отправителя, чтобы расшифровать шифр шага 2
Таким образом проверяется подлинность сообщения.
4) Получатель теперь использует свой закрытый ключ, чтобы расшифровать шифр шага 1
Рубрики
SSH

Putty — экспорт\импорт настроек

 

regedit /ea c:\putty.reg HKEY_CURRENT_USER\Software\SimonTatham\PuTTY экспорт
regedit /s putty.reg импорт

Рубрики
SSH

ssh — авторизация без пароля с помощью RSA ключей

Ручной способ:


По умолчанию ключи хранятся в домашней директории пользователя, 
/home/имя пользователя/.ssh/id_rsa и id_rsa.pub

0.Создаем пару ключей на сервере с которого будем подключатся.
ssh-keygen

1.Проверяем на удаленном сервере наличие ключей и пользователя(имя такое же как и на 
сервере с которого подключаемся. 
ls -l /home/имя_пользователя/.ssh 
Если их нету то создаем пользователя и директорию на удаленном сервере.
adduser имя_пользователя
mkdir /home/имя_пользователя/.ssh 

2. Копируем ключ на удаленный сервер 
scp ~/.ssh/id_rsa.pub hostname_of_server:.ssh/authorized_keys

Важно: если файл authorized_keys2 уже существует, то его нужно просто дописать:
cat ~/.ssh/id_rsa.pub | ssh hostname_of_server "cat >> .ssh/authorized_keys2"

P.s Файл конфигурации искать ключи: /etc/ssh/sshd_config

Авто способ:

!!! Выполнять на клиенте с которого будем подключатся к серверу.
ssh-keygen - создаем пару ключей на сервере с которого будем подключатся.
ssh-copy-id sammy@IP_адрес_вашего_сервера - копирование открытого ключа
Рубрики
SSH

Putty — Как передавать файлы по протоколу ssh на windows машине


Для этого нужна консольная утилита pscp.exe, входящая в очень полезный пакет утилит putty.

ОТКРЫВАЕМ CMD (win-key+R)
путь к PSCP>pscp.exe ЧТО_копируем? имя_юзера_на_сервере@IP-адресс_или_ДНС:/КУДА_КОПИРУЕМ!и_как_назавем!

1.[Передача файла в сторону сервера SSH]
c:\Program Files\putty>pscp -P 22 c:\AUTOEXEC.BAT root@192.168.0.254:/root/autoexec_copy.txt
После выполнения этой команды на сервере в папке /root появится файл autoexec_copy.txt - точная копия AUTOEXEC.BAT.


2.[Передача файла от сервера SSH к клиенту]
c:\Program Files\putty>pscp -P 22 root@192.168.0.254:/etc/ipnat.rules c:\ipnat_rules_cpy.txt
После выполнения этой команды на диске c: клиента, в корневом каталоге появится файл ipnat_rules_cpy.txt - точная копия ipnat.rules.

Опцию -P, указывающую порт подключения, указывать не обязательно, если используется стандартный порт SSH (22 TCP).

P.S.
Программа winscp - имеет интерфейс похожий на  total commander, far
Рубрики
SSH

ssh — удаленное подключение к рабочему столу Linux из Windows

!!! Вместо связки ssh ForwardX11 + Putty + Xming используйте x2go

Для соединения все также используется ssh.
https://b14esh.com/nix/ssh/x2go.html - установка на сервер linux x2go
https://wiki.x2go.org/doku.php/download:start - скачать клиент x2go для windows

Настраиваем и устанавливаем сервер с ssh :

 
0. ставим на debian 
apt-get install ssh

1. настраиваем 
nano  /etc/ssh/ssh_config
---------------------------------------
 ForwardX11 yes
----------------------------------------

Установка и настройка Putty + Xming на windows:

0. ставим на windows SSH-клиент. 
Я установил PuTTY. 
X Server для Windows я выбрал Xming.

2. настроим putty
Для начала установим соединение по SSH с удаленным компьютером. Вводим IP-адрес компьютера Linux.
в настройках Window / Translation включим кодировку UTF8 .
Теперь переходим в раздел Connection / SSH / X11 и включаем перенаправление графического интерфейса. 
!!!В качестве расположения X-сервера водим IP-адрес компьютера Windows  , за которым сейчас сидим.
!!! вот так 1.1.1.1:0.0  ( :0.0 порт xming :0)
!!! в последних версиях putty достаточно галки "enable X11 forwarding"


3.Теперь настроим Xming. 
Для этого запускаем программу XLaunch - это мастер настроек. 
На первом шаге указываем способ интеграции в графическое окружение Windows. (по умолчанию) 
На втором шаге нам предлагается автоматически запускать какое-нибудь приложение вместе с иксами. (по умолчанию)
На третьем шаге указываем параметры запуска Xming. 
Опция Clipboard позволяет интегрировать буфер обмена. 

Во второе поле вставить:
-dpi 96 -xkblayout us,ru -xkbvariant basic,winkeys -xkboptions grp:caps_toggle

И, наконец, на следующем шаге сохраняем настройки кнопкой "Save configuration" и запускаем X-сервер кнопкой "Готово".

4. запуск программ в консоли putty
kwrite &
gedit &
gparted &
-----------------------------------
Рубрики
SSH

ssh — как для root отключить возможность логина по SSH

 
!!! Не надо этого делать никогда.
!!! Разрешать вход руту по ssh опасно.

Для рута отключим возможность логина по SSH в /etc/ssh/sshd_config:
sudo nano /etc/ssh/sshd_config
------------------------------
#PermitRootLogin yes
PermitRootLogin no
------------------------------
Рубрики
SSH

ssh, scp

scp:

 
scp [-key] [[user@]from-host:]source-file [[user@]to-host:][destination-file]
from-host - имя, IP адрес хоста, каталог, файл (что копируем) 
to-host - имя, IP адрес хоста, каталог, файл (куда копируем)
user - пользователь у которого есть права для доступа к файлу и директории, которые будут скопированы с хоста-источника. 
source-file - файл, файлы, директория, которые будут скопированы из хоста-источника на хост-назначения (-r рекурсивно копировать директории)
destination-file - имя, которое получит файл при копировании на хосте-назначения, если не указан то файлы будут скопированы с исходными именами

ключи key:

-p - сохранить время изменения, время доступа и права исходного файла на хосте-назначения
-q - не отображать статус выполнения
-r - рекурсивно копировать содержимое директории, если в файле-источнике указана директория
-v - показывать сообщения отладки
-P - нестандартный порт SSH на хосте
-c - изменить шифрование, по умолчанию использует алгоритм AES-128 для шифрования данных (возможные варианты шифрования blowfish, arcfour(RC4), 3des)

Примеры:

ssh user1@remote_server - подключение к серверу
scp -r file.txt user1@remote_server:~/ - скопировать в домашнею директорию
scp file.zip root@192.168.0.2:/home/ - скопировать file.zip на сервер 192.168.0.2 под пользователем root  в каталог /home/
scp -rp /home/* root@192.168.0.2:/home/ - копируем содержимое каталога /home на удаленный сервер 192.168.0.2 в каталог /home/
scp root@192.168.0.2:/home/file.zip /home/ - копируем файл с удаленного сервера 
scp root@192.168.0.1:/home/file.zip root@192.168.0.2:/home/ - копируем файлы с одного сервера на другой находясь на третьем
scp -l limit username@server:/home/uername/* /home/username/tmp - ограничение скорости передачи, limit указывается в Кбит/с

scp -c blowfish user@server:/home/user/file /tmp - изменить алгоритма шифрования с AES-128 на Blowfish
scp -c arcfour user@server:/home/user/file /tmp - использование алгоритма шифрования RC4, который является самым быстрым из возможных
scp -c 3des user@server:/home/user/file /tmp - это самый медленный алгоритм шифрования, но он более безопасный
Рубрики
SSH

Netcat (nc)

Подключение к web-server

 
Netcat (nc)
nc yandex.ru 80
HEAD / HTTP / 1.0
GET /HTTP /1.0

Netcat (nc) Передача файла

 
cat disk.iso | nc 127.0.0.1 5000 передача
nc -l 5000 > disk.iso прием

Netcat (nc) Передача папки

 
server# tar -cf - -C VIDEO_TS . | nc -l -p 4444 - Сделаем архив папки и прикрепим на 4444 порт
client# nc 192.168.1.1 4444 | tar xpf - -C VIDEO_TS - Получим файл с порта 4444 и распакуем
server# tar -czf - /etc/ | nc -l 3333 - Быстрый backup
client# nc 192.168.1.1 3333 | pv -b > mybackup.tar.gz

Netcat (nc) Передача файла

 
server# cat largefile | nc -l 5678 - Публикуем файл largefile на 5678 порт
client# nc 192.168.1.1 5678 > largefile - Принимаем файл с 5678 порта в новый файл largefile
server#cat backup.iso | pv -b | nc -l 3333 - Передаем файл с информацией о состоянии (прогресс)
client#nc 192.168.1.1 3333 | pv -b > backup.iso - Получаем файл с информацией о состоянии (прогресс)

Netcat (nc) Передача образа

 
server# dd if=/dev/sda0 | nc -l 4444  - Передаем образ раздела
client# nc 192.168.1.1 4444 | dd of=/dev/sda0 - Клонируем раздел
client# nc 192.168.1.1 4444 | dd of=sda0.img - или записываем образ в файл
server# dd if=/dev/hdb5 | gzip -9 | nc -l 3333
client# nc 192.168.1.1 3333 | pv -b > myhdb5partition.img.gz

Netcat (nc) Сканер портов

 
# nc -v -w 1 localhost -z 1-5901 |grep succeeded!
Connection to localhost 22 port [tcp/ssh] succeeded!
Connection to localhost 25 port [tcp/smtp] succeeded!
# nc -z 192.168.1.112 1-90
Connection to 192.168.1.112 22 port [tcp/ssh] succeeded!
Connection to 192.168.1.112 80 port [tcp/http] succeeded!

Netcat (nc) Чат

 
zabrosov# nc -lp 4444
boss    # nc 192.168.1.11 4444

Netcat (nc) Hacks

 
# nc -lp 4444 -e /bin/bash - Удаленный shell (server backdoor)
# nc -lp 4444 -e cmd.exe  - Удаленный shell для Windows; -e только для win ?

# webserver
# while true; do nc -l -p 80 < hohoho.html; done - Петля на 80 порту, отдаёт html страничку

# Бэкап по шифрованному туннелю, с авто закрытием в конце операции
server# cat backup.iso | nc -l 3333
client# ssh -f -L 23333:127.0.0.1:3333 hohoho@192.168.1.1 sleep 10; nc 127.0.0.1 23333 | pv -b > backup.iso

Примеры использования:

nc -zv server 21 22 80 443 3000
Здесь:
-z — не устанавливать соединение, а только проверить доступность порта.
-v — выводить дополнительную информацию (режим verbose).

Сканирование диапазона портов:
Для проверки диапазона портов, укажите его через дефис:
nc -zv server 20-7000


Установка TCP-соединения:
Открыть TCP-соединение с портом 5000 на удалённом сервере с использованием источника порта 3000 и тайм-аутом в 10 секунд:
nc -p 3000 -w 10 server 5000
Здесь:
-p — исходный порт (3000).
-w — время ожидания (10 секунд).

Рубрики
SSH

rsync \ синхронизация каталогов \ файлов

rsync + tar

# В Linux-машине есть возможность сохранить разрешение acl с помощью командных утилит tar и rsync:
# tar --acls -cvpf file.tar file

rsync ключи:
-p  сохранить разрешения
-A  сохранить ACL
-a  режим архива
-v  подробный режим
-z  сжать данные файла во время передачи
--exclude={'dir_name','file_name'} исключаем каталоги dir_name и файлы file_name
--rsync-path="sudo rsync" подымаем rsync права до root
--bwlimit=2048 ограничить скорость передачи

rsync -avzpA --exclude={'proc','dev','lost+found','tmp','run','sys'} --rsync-path="sudo rsync" Имя_хоста_которыйбэкапим:/ /куда.бэкапим


rsync + ssh

Пусть изменяется удалённый каталог, копируем его на локальную машину так:
$ rsync -avz --delete -e ssh логин@удалённый.хост:путь/откуда/ путь/куда

Если же «отражаем» локальный каталог на удалённую машину (выкладываем изменённый сайт на хостинг), то
$ rsync -avz --delete -e ssh путь/откуда/ логин@удалённый.хост:путь/куда

Полезно поиграться с командой добавляя и убирая слэш («/») после названия исходного каталога, чтобы понять, что он делает (или почитать man rsync).
Потренироваться, кстати, можно и с двумя локальными каталогами.

Если удалять файлы, исчезнувшие в исходном каталоге, но присутствующие в целевом не нужно, то ключ "--delete" нужно убрать.

rsync:

 
rsync [опции] источник [приемник]
rsync -a /dir1/dir2 /dir3 - будет создана иерархия /dir3/dir2/файлы
rsync -a /dir1/dir2/ /dir3 - будет создана иерархия /dir3/файлы
rsync -a $srv/ $srv:src
rsync -av --delete -e /dir/откуда/ /dir/куда/ - зеркалирование (v-вывод действий)

rsync -avz --rsync-path="sudo rsync" user@host:/tmp/file /tmp - копируем user@host:/tmp/file в каталог /tmp, а параметр "sudo rsync" позволит выполнить от root (пользователь user должен быть в sudo)

rsync --rsync-path="echo  | sudo -Sv && sudo rsync" --archive --acls --xattrs --one-file-system -e "ssh -T -c arcfour -o Compression=no -x" --exclude=".*" --size-only --log-file=/home/backup/rsync.log  remote@server_dns.ru:/home/* /home/backup/

cсинхронизация каталогов ssh+rsync:

rsync -avz --delete -e ssh логин@удалённый.хост:путь/откуда/ путь/куда   - изменяется удалённый каталог, копируем его на локальную машину
rsync -avz --delete -e ssh путь/откуда/ логин@удалённый.хост:путь/куда   - изменяется локальный каталог, копируем его на удаленную машину

rsync еще примеры:

rsync -rogpav --delete /home /tmp - синхронизировать директории /tmp и /home
rsync -az -e ssh --delete ip_addr:/home/public /home/local - синхронизировать локальную и удаленную директории через ssh туннель используя сжатие
rsync -rogpav -e ssh --delete /home ip_address:/tmp - синхронизация через SSH туннель
rsync -az -e ssh --delete /home/local ip_addr:/home/public - синхронизировать удалённую директорию с локальной используя ssh туннель со сжатием

lftp

Всё это хорошо, да вот только доступ по SSH есть далеко не всегда (например, если хостинг дешёвый...). 
Иногда требуется синхронизировать каталоги по FTP. Это умеет программка lftp.
man lftp - получить мануал

Вытянуть каталог с удалённого сервера (синхронизировать локальный каталог с удалённым):
$ lftp -e 'mirror -e каталог-на-сервере локальный-каталог; bye;' -u логин,пароль удалённый.хост

И наоборот, выложить локальный каталог на удалённый сервер:
$ lftp -e 'mirror -R локальный-каталог каталог-на-сервере; bye;' -u логин,пароль удалённый.хост

Рубрики
SSH

x2go

Ссылки:

https://wiki.x2go.org/doku.php/download:start - клиенты для windows, macosx, linux
https://wiki.x2go.org/doku.php/doc:installation:x2goserver

Что такое x2go

Прекрасный клиент/сервер для удаленного управления рабочим столом linux
Работает через ssh 

Установка на linuxmint 18+

sudo add-apt-repository ppa:x2go/stable
sudo apt-get update && sudo apt-get install x2goserver x2goserver-xsession

Установка на debian

sudo apt-get install x2goserver x2goserver-xsession
Рубрики
SSH

ssh \ Проблемы при подключении \ diffie-hellman-group1-sha1 \ config \ authorized_keys \ Their offer:


Довольно распространённой является проблема с алгоритмами шифрования на старом железе:
Если при попытке зайти на коммутатор из под Linux возникает ошибка 
"Unable to negotiate with AnyHost port 22: no matching key exchange method found. 
Their offer: diffie-hellman-group1-sha1" 

Можно выполнить следующую команду:
ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 user@host где user - имя пользователя на свитче, а host - IP-адрес свитча.
После выполнения данной команды необходимо повторно подключиться к хосту.

Но бывает так, что приведенная выше команда не устраняет проблему и мы увидим в терминале следующий вывод: 
"Unable to negotiate with host port 22: no matching cipher found. 
Their offer: aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc"

Проверяем используемые нами типы шифрования для SSH:
ssh -Q cipher

Допустим, получим следующий вывод:
3des-cbc
aes128-cbc
aes192-cbc
aes256-cbc
aes128-ctr
aes192-ctr
aes256-ctr
aes128-gcm
aes256-gcm

Смотрим на вывод ошибки и сверяем предлагаемые типы шифрования с доступными нам. 
Допустим, совпадает "aes256-cbc". 

Выполним следующую команду:
ssh -c aes256-cbc -oKexAlgorithms=+diffie-hellman-group1-sha1 user@host
где -c aes256-cbc - жесткая привязка к алгоритму шифрования;
user - имя пользователя на свитче;
host - IP-адрес свитча.

Пример .ssh/config:

Host localhost
  StrictHostKeyChecking no
Host localhost:2222
  StrictHostKeyChecking no
Host localhost:5999
  StrictHostKeyChecking no
Host ИМЯ_ХОСТА 
  KexAlgorithms +diffie-hellman-group1-sha1
Host 10.1.1.20 
  KexAlgorithms +diffie-hellman-group1-sha1
Host gootle.com
  Port  22003
  KexAlgorithms +diffie-hellman-group1-sha1
Host 8.8.8.8
  KexAlgorithms +diffie-hellman-group1-sha1

.ssh/authorized_keys

ssh-rsa ПУБЛИЧНЫЙ_КЛЮЧ

Unable to negotiate with 192.168.1.1 port 22: no matching host key type found. Their offer: ssh-rsa

ssh -oHostKeyAlgorithms=+ssh-rsa root@192.168.1.1

Unable to negotiate with 192.168.16.16 port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss
Unable to negotiate with 192.168.16.16 port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,kexguess2@matt.ucc.asn.au

ssh -o KexAlgorithms=diffie-hellman-group14-sha1 -oHostKeyAlgorithms=+ssh-dss  user@host.local
Рубрики
SSH

ssh — использование ключа с флешки

ssh-agent
eval 'ssh-agent'
ssh-add - добавление ключа
ssh-add /media/point_mount/myprivate_key - добавление ключа сохраненных на флешке
ssh-add -l - вывод всех ключей сохраненных в агенте
ssh-add -d /media/point_mount/myprivatekey - удаление ключа из агента хранилища на влешке
ssh-add -D - удаление всех ключей из агента
Рубрики
SSH

ssh — тунели

ssh -l user server -  подключение SSH 
ssh user@server - подключение SSH (рекомендуют использовать) (ESC + ~ прервать сессию)
ssh -p 12345 user@server - подключится к ssh используя порт 12345
ssh -L 1234:localhost:631 myserver - быстрый и легкий способ безлопастных тунелей
ssh -L 12345:google.com:80 myserver - пере адресация интернет сервисов (открываем браузер URL рhttp://localhost:12345)
ssh -L 12345:google.com:80 -N myserver - пере адресация интернет сервисов (-N предотвратить выполнение команд (получение интерпретатора команд)

Применение SSH в качестве прокси-серверв SOCKS
ssh -D 12345 myserver

Регистрация в удаленной системе и туннелирование с помощью SSH
FireFox -> Manual Proxy config 
-> Socks hoats =localhost:12345 
-> SOCKS v5
-> New Proxy For = localhost, 127.0.0.1

Рубрики
SSH

ssh / множественные подключения / проксирование соединений / выход за пределы HTTP-изоляции

множественные подключения

OpenSSH способен обслуживать множество одновременных соединений с одной и той же машиной. 
Обычно пользователи просто запускают команду и ждут ее завершения, чтобы запустить следующую. 
К счастью, эту проблему легко обойти путем разделения одного соединения на множество сессий. 
Просто добавь в конфиг ssh (~/.ssh/config) следующие строки:
ControlMaster auto
ControlPath ~/.ssh/mux_%h_%p_%r
Ты сможешь создать столько соединений с одним и тем же сервером, сколько посчитаешь нужным, 
причем время на повторную аутентификацию тратить будет не нужно.

проксирование соединений

Допустим, ты не можешь создать соединение с SSH-сервером напрямую, но можешь использовать для этого другой хост, к которому ты тоже имеешь SSH-доступ. 
Добавь в свой конфиг следующие строки:
ForwardAgent yes
Host host
 HostName host.com
 ProxyCommand ssh proxy-host.com \
 netcat -q 600 %h %p

Команда ssh host создаст соединение с сервером host.com через сервер proxy-host.com.

выход за пределы HTTP-изоляции

Трюк номер три — . Многие организации не просто режут неугодный им трафик, но и принуж дают пользователей выходить в Сеть только с использованием HTTP-протокола. 
Такую несправедливость легко обойти с помощью сorkscrew (http://www.agroman.net/corkscrew/), который умеет туннелировать SSH-трафик через HTTP. 
Просто установи его на свою машину и добавь в конфиг следующие строки (где proxy.com и 80 — это адрес внешнего HTTP-прокси и его порт):
Host *
 ProxyCommand corkscrew proxy.com 80 %h %p
Теперь все соединения пойдут через указанный HTTP-прокси.

тест пропускной способности сети

Чтобы протестировать скорость соединения, необязательно устанавливать специализированное ПО, достаточно утилиты pv и старого доброго SSH:
$ sudo apt-get install pv
$ yes | pv | ssh host.com "cat > /dev/null"

удаленный анализ сетевого трафика

Почтив любой UNIX-системе есть сетевой сниффер tcpdump, однако читать его логи довольно утомительно. 
Возможности OpenSSH помогут упростить анализ трафика:
$ ssh root@host.com tcpdump -w – 'port !22' | wireshark -k -i -

Теперь весь трафик, проходящий через host.com, будет виден в графическом окне wireshark на твоей машине.

передача файлов на низкой скорости

Иногда бывает необходимо передать большое количество файлов на удаленную машину, но сделать это так, чтобы процесс не мешал работе с сетью. 
В этом случае можно воспользоваться инструментом cstream:
$ sudo apt-get install cstream
$ tar -cj /backup | cstream -t 512k | ssh host 'tar -xj -C /backup'

всегда открытая SSH-сессия

Пользователям ноутбуков, чье соединение с сетью может быть не постоянным, приходится каждый раз заново запускать SSH-клиент в момент, когда сеть появляется, и убивать его при потере соединения. 
Избежать этого можно с помощью инструмента autossh, который будет поддерживать иллюзию постоянного соединения с сервером, восстанавливая связь, когда сеть окажется доступной:
$ sudo apt-get install autossh
$ autossh -M50000 -t server.example.com \
 'screen -raAd mysession'

запуск команды на нескольких серверах одновременно

Комментарии излишни:
$ echo "uptime" | pee "ssh host1" "ssh host2" \
 "ssh host3"

удаленное сравнение файлов

Часто требуется сравнить локальную и удаленную версию какого-либо конфига, однако копировать файлы туда-сюда неудобно и долго. 
В этом случае можно воспользоваться следующей командой:
$ ssh user@host cat /путь/к/удаленному/файлу |  diff /путь/к/локальному/файлу -

То же самое можно проделать для двух файлов, находящихся на разных серверах:
$ diff <(ssh host1 cat /etc/apt/sources.list) < (ssh host2 cat /etc/apt/sources.list)

одновременный просмотр логов с несколькихмашин

С помощью multitail и SSH можно запросто просматривать логи с двух серверов одновременно:
$ sudo apt-get install multitail
$ multitail -l 'ssh host1 "tail -f \
 /var/log/apache2/error.log"' -l 'ssh host2 \
 "tail -f /var/log/apache2/error.log"'

копирование файлов с одной удаленной машины на другую через локальную

В случае если две удаленные машины не могут установить связь друг с другом, файлы между ними можно передавать, 
используя свой комп в качестве промежуточного звена:
$ ssh root@host1 "cd /каталог && tar -cf – ." |\
 ssh root@host2 "cd /каталог && tar -xf -"

копирование вывода удаленной команды в буфер обмена

Часто требуется скопировать вывод удаленной команды в буфер обмена, чтобы вставить его в письмо, сообщение форума и т. д. 
Проще всего это сделать с помощью утилиты xclip:
$ ssh user@host cat /файл.txt | xclip

синхронизация времени средствами SSH

В случае, если машина не имеет доступа к NTP-серверу или на ней не установлен NTP-клиент, синхронизировать время между машинами можно так:
# date --set="$(ssh user@server date)"

установка пакетов удаленной машины на локальную

Нередко требуется синхронизировать две машины так, чтобы они имели одинаковый набор установленных пакетов. 
Стандартными методами сделать это сложно, но с помощью SSH проще простого:
# ssh remotehost 'dpkg --get-selections' |  dpkg --set-selections && dselect install

снимок удаленного экрана

Можно очень легко получить изображение X-сервера с удаленной машины, воспользовавшись стандартным графическим пакетом ImageMagick:
# ssh user@host "DISPLAY=:0.0 import -window \
 root -format png -" | display -format png -

Чтобы сохранить его в файле, последнюю команду следует заменить на «> file.png».

ускорение передачи данных

Если машины,с которыми установлено соединение, находятся внутри заведомо безопасной сети (например, офис или дом), 
передачу данных средствами SSH можно несколько ускорить, если использовать менее стойкий алгоритм шифрования. 
Для этого добавь в конфигурационный файл следующие строки:
Host host.com
 Ciphers arcfour256
 MACs umac-64@openssh.com

вывод звука с удаленной машины на локальную

Вместе с картинкой рабочего стола удаленной машины иногда хочется получить и звук. 
Это делается с помощью банального dd:
$ dd if=/dev/dsp | ssh -c arcfour -C \
 user@host dd of=/dev/dsp

запуск локального скрипта на удаленной машине

Нередко требуется запустить скрипт на удаленной машине, однако копировать его туда совсем необязательно, достаточно выполнить следующую простую команду:
$ ssh -T user@host < script.sh

OPENSSL

OpenSSL представляет собой систему защиты и сертификации данных, которая была разработана в ответ на создание протокола безопасных сокетов SSL компанией Netscape. 
Вопреки расхожему мнению, OpenSSL вовсе не является инструментом для реализации SSL-протокола и может выполнять множество самых разнообразных функций, 
в том числе управлять ключами и сертификатами, рассчитывать хеши и т.д. 
Вот лишь неполный список возможностей этого криптографического комбайна:
• создание ключей RSA и DSA и управление ими (команды rsa, dsa, dsaparam);
• создание сертификатов формата x509, формирование запросов на сертификацию, восстановление (команды x509, req, verify, ca, crl, pks12, pks7);
• симметричное и асимметричное шифрование данных (команды enc, rsautl);
• расчет хешей (команда dgst);
• работа с S/MIME (команда s/mime).
Также OpenSSL может быть использован для проверки SSL-серверов и клиентов с помощью специальных команд s_client/s_server и для тестирования скорости работы различных алгоритмов (команда speed).
Мы не раз писали о работе с пакетом OpenSSL, поэтому не будем рассматривать стандартные примеры его использования вроде создания хешей и сертификатов, а сразу перейдем к более серьезным трюкам.

openssl бенчмарк

Одна из интересных особенностей OpenSSL заключается в том, что он может провести бенчмарк используемых алгоритмов и скоростиустановления SSL-соединения. 
Для этого предназначена стандартная команда s_time. 
Чтобы оценить скорость установки SSL-соединения, нужно применить ее к команде openssl:
$ openssl s_time -connect gmail.com:443 -www /test.html -new

103 connections in 0.75s; 137.33 connections/user sec,bytes read 42436
103 connections in 31 real seconds, 412 bytes read perconnection

То же самое можно проделать с помощью наиболее стойкихалгоритмов:
$ openssl s_time -ssl3 -cipher HIGH -connect gmail.com:443 -www / -new

99 connections in 0.73s; 135.62 connections/user sec,bytes read 40788
99 connections in 31 real seconds, 412 bytes read perconnection

Эти две команды позволяют определить максимальную пропускную способность SSL-сервера. 
Но еще более интересный способ заключается в тестировании всех поддерживаемых алгоритмов. 

Для этого нам придется прибегнуть к скриптингу:
IFS=":"
for c in $(openssl ciphers -ssl3 RSA); do
 echo $c
 openssl s_time -connect host:443 -www / -new -time 10 -cipher $c 2>&1 | grep bytes
 echo
done

Такая команда позволяет измерить скорость установки SSL-соединения с помощью различных алгоритмов шифрования, что можно использовать, например, для тюнинга SSL-сервера. 
Если же SSL-сервера как такового еще нет, его легко эмулировать с помощью самого OpenSSL. 
На серверной машине запускаем OpenSSL-сервер:
$ openssl s_server -cert mycert.pem -www

На клиентской выполняем следующую команду:
$ openssl s_time -connect myhost:4433 -www / -new -ssl3

openssl подключение к удаленным серверам

Еще одна интересная команда OpenSSL — это s_client, которая позволяет коннектиться к удаленным SSL-серверам для их тестирования. 
Чаще всего я использую эту команду, чтобы проверить дату выдачи сертификата. 
Для этого следует просто подключиться к удаленному SSL-серверу, дождаться, покана экране появится информация о сертификате, а затем прогнать его через всё тот же openssl, чтобы вычленить даты. 
При использовании одной команды всё это выглядит так:
$ echo | openssl s_client -connect \
 http://www.google.com:443 2>/dev/null | \
 openssl x509 -dates -noout

notBefore=Oct 26 00:00:00 2011 GMT
notAfter=Sep 30 23:59:59 2013 GMT

Команду s_client можно также применять для тестирования сервера на уязвимость, заключающуюся в использовании нестойких алгоритмов шифрования:
$ openssl s_client -connect http://www.google.com:443 -cipher LOW 

CONNECTED(00000003)
140513251690152:error:14077410:SSL routines:SSL23_
GET_SERVER_HELLO:sslv3 alert handshake failure:s23_clnt.c:658:

Сервер, не поддерживающий нестойкие алгоритмы шифрования, просто откажется устанавливать соединение, как это и произошло в случае с сервером Google. 
Команда s_client также довольно удобна для отладки различных протоколов (в этом случае она выступает в виде SSL’ного Telnet). 
Например:
$ openssl s_client -starttls smtp -crlf \
 -connect smtp.gmail.com:25

openssl шифрование

О шифровании с помощью OpenSSL не писал только ленивый, поэтому мы остановимся не на самих принципах шифрования, а на том, как его можно использовать для вспомогательных задач. 
Утилита командной строки openssl удобна тем, что она, как и все остальные команды UNIX, может принимать данные на вход и имеет для них стандартный выход. 
В результате с помощью одной простой команды можно обеспечить, например, защищенную передачу файла по сети:

отправляющий$ cat /etc/passwd | openssl \
 aes-256-cbc -a -e -pass pass:пароль | \
 netcat -l -p 8080

принимающий$ netcat хост:8080 | openssl \
 aes-256-cbc -a -d -pass pass:пароль > passwd

Можно также применять и различные скрипты, чтобы автоматизировать шифрование множества файлов (пароль в /tmp/passwd):
$ for f in * ; do [ -f $f ] && \
 openssl enc -aes-256-cbc -salt -in $f \
 -out $f.enc -pass fi le:/tmp/passwd ; done

Для расшифровки отдельно взятых файлов используем следующую команду:
$ openssl enc -d -aes-256-cbc -salt \
 -in файл.enc -out fi lename \
 -pass fi le:/path/to/passwd

Для шифрования целого каталога проще, конечно, воспользоваться такой конструкцией:
$ tar c каталог | openssl enc -aes-256-cbc -e \
 > secret.tar.enc

OpenSSL удобно использовать для генерирования паролей:
$ openssl rand 8 -base64
O0Hqtv9l0sY=

А сгенерировать хеш для записи в /etc/passwd можно так:
# openssl passwd -1 my-secret-pass
$1$WA7AVhQL$y9VaGwseiKRLSGoJg21TP0

Кстати, кодирование в base64 может пригодиться для отправки файлов, если двоичная передача данных не поддерживается:
$ tar -c каталог | gzip -9 | openssl enc \
 -base64 > text-message.txt

Возможность генерирования случайных данных можно использовать для создания фиктивных MAC-адресов:
$ openssl rand -hex 6 | \
 sed 's/\(..\)/\1:/g; s/.$//'
f2:9e:56:fd:5a:93


Примеры в файле .ssh/config

Использование ProxyJump
Использование ProxyJump
Host remotehost
    HostName remote.example.com
    User remoteuser
    ProxyJump jumphost

Переадресация порта
Host jumpbox
    HostName jump.example.com
    User jumpuser
    LocalForward 8080 localhost:80

Автоматическое выполнение команды при подключении
Host autoscript
    HostName remote.example.com
    User username
    IdentityFile ~/.ssh/id_rsa
    RemoteCommand /path/to/program
    RequestTTY yes