www.raaar.ru

Копирование файлов через SSH
SSH аутентификация по открытому ключу
Подключения по SSH без ввода пароля
Запуск команд на удаленном Linux-сервере через SSH
Отключение проверки ключа хоста в SSH


Копирование файлов через SSH

SCP (Secure CoPy) - программа для удаленного копирования фалов по сети между хостами.
Она использует SSH для передачи данных, ту же аутентификацию и те же меры безопасности, что и SSH.
Во время копирования исходного фала в файл назначения, который уже существует, SCP перезаписывает файл назначения. Если файл назначения еще не существует, тогда создается пустой файл, ему задается имя файла назначения и уже в него записывается содержимое копируемого файла.

Копируем файл "file.txt" из удаленного сервера на локальный компьютер.

$ scp user@remote.host:file.txt /some/local/directory

Копируем файл "file.txt" с локального компьютера на удаленный сервер.

$ scp file.txt user@remote.host:/some/remote/directory

Копируем папку "dir1" с локального хоста в директорию "dir2" на удаленном хосте.

$ scp -r dir1 user@remote.host:/some/remote/directory/dir2

Копируем файл "file.txt" с одного удаленного сервера "remote.host1" на другой удаленный сервер "remote.host2".

$ scp user@remote.host1:/directory/file.txt user@remote.host2:/some/directory/

Копируем файлы "file1.txt" и "file2.txt" с локального компьютера в Ваш домашний каталог на удаленном сервере.

$ scp file1.txt file2.txt user@remote.host:~

Копируем файл "file.txt" с локального хоста на удаленный хост, используя порт 2222.

$ scp -P 2222 file.txt user@remote.host:/some/remote/directory

Копируем файл "file.txt" с локального компьютера в Ваш домашний каталог на удаленном сервере. Сохраняем время изменения и время доступа и права копируемого фала.

$ scp -p file.txt user@remote.host:~

Копируем файл "file.txt" с локального компьютера в Ваш домашний каталог на удаленном сервере. Увеличиваем скорость работы SCP изменяя алгоритм шифрования с AES-128 (по умолчанию) на Blowfish.

$ scp -c blowfish file.txt user@remote.host:~

Копируем файл "file.txt" с локального компьютера в Ваш домашний каталог на удаленном сервере. Ограничиваем ширину канала используемого командой SCP до 100 Kbit/s.

$ scp -l 100 file.txt user@remote.host:~

Копируем несколько файлов с удаленного хост в текущую директорию на Вашем локальном хосте.

$ scp user@remote.host:~/\{file1,file2,file3\} .



SSH аутентификация по открытому ключу


Для улучшения системы безопасности и получения возможности выполнения автоматизированных задач по обслуживанию на других машинах, Вы можете использовать аутентификацию на основе открытого ключа, вместо стандартной аутентификации по паролю.
Аутентификация на основе ключей использует два ключа, один "открытый" (публичный ключ), который доступен каждому и второй "закрытый" (секретный ключ), который доступен только владельцу.

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

1. Генерируем пару ключей на локальном компьютере


Имейте в виду, что ключи должны генерироваться для каждого пользователя отдельно.

Создаем директорию, если она еще не существует и устанавливаем права :

$ mkdir -p ~/.ssh
$ chmod 700 ~/.ssh


Заходим в директорию и генерируем пару RSA ключей (открытый и закрытый) :

$ cd ~/.ssh
$ ssh-keygen -t rsa

Вы можете добавить комментарий к открытому ключу :

$ ssh-keygen -t rsa -C "Комментарий... обычно здесь будет достаточно указать почтовый ящик..."

Копируем открытый ключ на удаленный сервер :

$ scp -p id_rsa.pub RemoteUser@RemoteHost

2. Подключаемся к удаленному серверу и устанавливаем открытый ключ


$ ssh RemoteUser@RemoteHost
Password: ********

Создаем директорию, если она еще не существует и устанавливаем права :

RemoteHost$ mkdir -p ~/.ssh
RemoteHost$ chmod 700 ~/.ssh

Копируем открытый ключ в файл 'authorized_keys' и устанавливаем права :

RemoteHost$ cat id_rsa.pub >> ~/.ssh/authorized_keys
RemoteHost$ chmod 600 ~/.ssh/authorized_keys


Удаляем открытый ключ из домашней директории и выходим :

RemoteHost$ rm -f ~/id_rsa.pub
RemoteHost$ logout


3. Добавляем закрытый ключ в агент аутентификации на локальном сервере


$ ssh-add
Identity added: /home/user/.ssh/id_rsa (/home/user/.ssh/id_rsa)

Теперь мы можем подключаться к удаленному серверу по SSH без ввода пароля.


Подключения по SSH без ввода пароля


Намного удобнее, быстрее и безопаснее подключиться на удаленный сервер по SSH, без ввода пароля.
Речь идет об аутентификации по ключам.
C помощью набора утилит из OpenSSH ее можно реализовать в три простых шага :
Сгенерировать ключи аутентификации на локальной машине;
Скопировать открытый ключ на удаленный сервер;
Добавить секретный ключ в агент аутентификации.

Шаг 1 : Генерируем пару ключей на локальной машине

Сгенерируем ключи аутентификации для SSH с помощью ssh-keygen.

$ ssh-keygen

Вывод :



Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
Created directory '/home/user/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
8c:2a:ed:82:98:6d:12:0a:3a:ba:b2:1c:c0:25:be:5b

Шаг 2 : Устанавливаем открытый ключ на удаленном сервере


С помощью ssh-copy-id устанавливаем открытый ключ (id_rsa.pub) на удаленный сервер. Он будет скопирован в файл autorized_keys

 $ ssh-copy-id -i ~/.ssh/id_rsa.pub UserName@RemoteServer



Вывод :




UserName@RemoteServer's password: ********
Now try logging into the machine, with "ssh 'username@remoteserver'", and check in:
~/.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.

Шаг 3 : Добавляем секретный ключ в агент аутентификации на локальной машине

С помощью ssh-add добавим секретный ключ в агент аутентификации (ssh-agent).

$ ssh-add

Вывод :

Identity added: /home/user/.ssh/id_rsa (/home/user/.ssh/id_rsa)

Теперь Вы сможете подключаться к удаленному серверу по протоколу SSH без ввода пароля.


Запуск команд на удаленном Linux-сервере через SSH




В этой заметке Вы найдете различные примеры того, как выполнять команды на удаленном Linux сервере и получать результат локально.
Данная информация будет очень полезна, если Вы пишете Bash скрипт, который будет запускаться с локальной машины и выполнять какие-либо команды на удаленном сервере.
Вы узнаете, как :
выполнить команду на удаленном Linux сервере;
запустить множество команд через SSH;
выполнить локальный скрипт на удаленном Linux сервере без его копирования.

Выполнение Команд на Удаленном Linux Сервере


$ ssh [user]@[server] '[command]'

Узнать uptime удаленного сервера

$ ssh root@192.168.1.1 'uptime'

Перезагрузить удаленный сервер

$ ssh root@192.168.1.1 'reboot'

Запуск нескольких команд через SSH



СПОСОБ 1 :


$ ssh [user]@[server] '[command 1]; [command 2]; [command 3]'

Узнать Uptime и Disk Usage

$ ssh root@192.168.1.1 'uptime; df -h'

СПОСОБ 2 :


$ ssh [user]@[server] '[command 1] | [command 2] | [command 3]'

Узнать Memory Usage и Load Average


$ ssh root@192.168.1.1 'free -m | cat /proc/loadavg'

СПОСОБ 3 :


$ ssh [user]@[server] << EOF
command 1
command 2
command 3
EOF

Показать версию ядра, информацию о CPU и кол-во RAM



$ ssh root@192.168.1.1 << EOF
uname -a
grep "model name" /proc/cpuinfo
grep MemTotal /proc/meminfo
EOF

Выполнение локального скрипта на удаленном Linux-сервере


$ ssh [user]@[server] 'bash -s' < [local_script]


Запустить локальный скрипт 'local_script.sh' на удаленной машине


$ ssh root@192.168.1.1 'bash -s' < local_script.sh

Отключение проверки ключа хоста в SSH



По умолчанию, SSH клиент при подключении к хосту осуществляет проверку подлинности его ключа.
Если SSH клиент не узнает отпечаток, он попросит вас подтвердить его добавление набрав "yes" или "no".
Это может привести к проблемам при попытке автоматического подключения с помощью какого-либо скрипта.
В данной статье объясняется как обойти проверку подлинности ключа отключив ее.

The Authenticity Of Host Can't Be Established


Когда вы впервые подключаетесь к удаленному хосту, его ключ скорее всего будет неизвестен вашему SSH клиенту и поэтому он предложит вам проверить и подтвердить его отпечаток:


The authenticity of host ***** can't be established.
RSA key fingerprint is *****.
Are you sure you want to continue connecting (yes/no)?

Если вы ответите утвердительно, SSH клиент продолжит подключение сохранив ключ сервера локально в файле ~/.ssh/known_hosts.
Чтобы обойти эту проверку вы можете из командной строки установить опцию "StrictHostKeyChecking" в значение "no".

$ ssh -o "StrictHostKeyChecking=no" user@host

Эта опция отключает запрос на подтверждение и автоматически добавляет ключ хоста в файл ~/.ssh/known_hosts

Remote Host Identification Has Changed




Тем не менее, даже с опцией "StrictHostKeyChecking=no", вам может быть отказано в подключении со следующим предупреждающим сообщением:



@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
*****
Please contact your system administrator.
Add correct host key in /home/user/.ssh/known_hosts to get rid of this message.
Offending key in /home/user/.ssh/known_hosts:1
RSA host key for ***** has changed and you have requested strict checking.
Host key verification failed.




Если вы уверены что это безопасно и ключ удаленного хоста был изменен в легитимный способ, вы можете пропустить проверку ключ перенаправив его в несуществующий known_hosts файл:

$ ssh -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking=no" user@host

Также обе опции могут быть заданы перманентно в ~/.ssh/config (для текущего пользователя) или в /etc/ssh/ssh_config (для всех пользователей), как для отдельных, так и для всех хостов.

Отключить Проверку SSH Host Key Для Всех Хостов

Host *
   StrictHostKeyChecking no
   UserKnownHostsFile=/dev/null

Отключить Проверку SSH Host Key Для 192.168.0.0/24

Host 192.168.0.*
   StrictHostKeyChecking no
   UserKnownHostsFile=/dev/null