7.5 KiB
SSH
Подключение
ssh admin@192.168.5.3
если имя пользователя не указывать, соединение произойдет от имени локального пользователя
ssh 192.168.5.3
не стандартный порт при подключении
ssh pi@da2001.ru -p 227
не добавлять публичный ключ удаленного хоста в локальный файл known_hosts, при этом будет запрошено подтверждение подключения
ssh -o UserKnownHostsFile=/dev/null admin@192.168.1.2
не проверять публичный ключ удаленного хоста
ssh -o StrictHostKeyChecking=no admin@192.168.1.2
не добавлять публичный ключ и не проверять удаленный хост
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no admin@192.168.1.2
выполнить команду на сервере без подключения
ssh user@host ls
выполнить локальный скрипт
ssh da2001@192.168.1.2 'python3' < test.py
SSH аутентификация по ключам
На локальном хосте linux сгенерировать пару ключей
ssh-keygen
парольную фразу можно оставить пустой, чтобы не вводить пароль каждый раз при обращении к ключу
По умолчанию ключи будут храниться в каталоге ~/.ssh
в домашнем каталоге текущего пользователя. Закрытый ключ будет называться id_rsa
, а связанный с ним открытый ключ – id_rsa.pub
Теперь необходимо скопировать публичный ключ на сервер, доступ к которому настраиваем
ssh-copy-id login@example.com
или
cat ~/.ssh/id_rsa.pub | ssh login@example.com "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Для дополнительной безопасности можно отключить доступ по паролю
sudo nano /etc/ssh/sshd_config
PasswordAuthentication no
Перезагрузить сервис
sudo systemctl restart ssh
Подключение через промежуточный хост
если нужно подключиться по ssh на host2, при этом прямого подключения нет, но есть возможность подключиться через host1, можно такое подключение выполнить одной командой
ssh -J user1@host1:22 user2@host2
но в таком случае придется вводить пароль от host1 и от host2. Чтобы этого избежать можно добавить на хосты публичный ключ клиента
если добавить к подключению опции:
-o UserKnownHostsFile=/dev/null
-o StrictHostKeyChecking=no
удаленный сервер не будет проверять и не будет добавлять хеш удаленного хоста в файл known_hosts
это может быть полезно на тестовых стендах, когда узлы часто меняются и хеш изменяется.
Таким образом, полная команда может выглядеть так:
ssh -J pi@da2001.ru:227 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no admin@192.168.5.3
SCP
scp ./wlt.py pi@da2001.ru:/home/pi
Не стандартный порт
scp -P 227 ./wlt.py pi@da2001.ru:/home/pi
ssh_config
Документация - man 5 ssh_config
Перевод man - https://www.opennet.ru/man.shtml?topic=ssh_config&category=5&russian=0
Конфигурационный файл клиента распологается в домашнем каталоге пользователя - ~/.ssh/config
Для изменения значений клиента по-умолчанию, можно задать свои значения. Также можно задать шаблоны для подключения к определённым хостам с указанием отличных значений для каждого подключения или группы подключений.
В общем виде подобная настройка может выглядеть подобным образом:
Host firsthost
SSH_OPTION_1 custom_value
SSH_OPTION_2 custom_value
SSH_OPTION_3 custom_value
Host secondhost
ANOTHER_OPTION custom_value
Host 192.168.13.24
ANOTHER_OPTION custom_value
Host 192.168.13.*
ANOTHER_OPTION custom_value
Host *host
ANOTHER_OPTION custom_value
Host *
CHANGE_DEFAULT custom_value
Стоит иметь ввиду - анализ файла осуществляется сверху вниз до соответствия параметрам. Таким образом, если вверху будет указана директива Host *
, для всех хостов будут применены значения определённые для этой директивы и анализ файла будет остановлен, т.к. *
подходит для любого хоста.
Общие параметры
Параметры определяются в порядке ключ-значение, при этом нет чёткого требования для разделения между ключом и значением, одинаково будут распознаны подобные определения:
Port 4567
Port=4567
Port = 4567
Пример конфигурации
Host home
User da2001
VisualHostKey yes
PasswordAuthentication no
IdentityFile ~/.ssh/personal_id_rsa
Host test*
User testuser
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
LogLevel QUIET
Host srv1 srv2 srv3
User jorn
Host *
User anotheruaser
StrictHostKeyChecking ask
UserKnownHostsFile ~/.ssh/known_hosts
LogLevel INFO
ServerAliveInterval 120
- отступы не обязательны, просто для удобочитаемости