Ssh. Hints
Подключение к SSH-серверу по определенному порту
ssh -p 1234 root@192.168.14.12
Добавить ключ сервера в known_hosts и выйти
ssh root@192.168.14.12 "exit"
Включить X11Forwarding для использования GUI VIRT-MANAGER (и запуска других программ на Linux) удаленно через SSH
На сервере
nano /etc/ssh/sshd_config
... X11Forwarding yes ...
service sshd restart
yum install virt-manager xauth dejavu-lgc-sans-fonts
На клиенте Linux
ssh -XY root@192.168.17.250 virt-manager
На клиенте windows запуск virt-manager через туннель ssh
Ставим в windows Xming (https://sourceforge.net/projects/xming/)
Запускаем putty, в настройках Connection - SSH - X11 ставим галку Enable X11 Forwarding
В консоли набираем: virt-manager
Монтирование по sshfs Centos
Ставим репозиторий EPEL
rpm -Uvh http://fedora-mirror02.rbc.ru/pub/epel/5/i386/epel-release-5-4.noarch.rpm
Устанавливаем
fuse
fuse-sshfs
Монтируем
Вариант 1
sshfs root@193.34.12.135:/home/userTMB /home/utmb/ -o reconnect
Вариант 2
sshpass -p "PassWord#1" sshfs -d -o allow_other -o ServerAliveInterval=15 root@192.168.17.12:/mnt /mnt/ssh/192.168.17.12 -o reconnect -C -o workaround=all
Включить/отключить авторизацию по публичным ключам
nano /etc/ssh/sshd_config
... PubkeyAuthentication [yes|no] ...
Включить/отключить авторизацию по паролю
nano /etc/ssh/sshd_config
... PasswordAuthentication [yes|no] ...
Беспарольная аутентификация ssh по ключам
На сервере SSH
mkdir ~/.ssh
На клиенте SSH
Создаем ключи на клиенте
ssh-keygen -t rsa
ИЛИ
ssh-keygen -b 2048 -t rsa -f /root/.ssh/id_rsa -q -N ""
Ключи были созданы в папке /root/.ssh/
После этого нужно добавить ключ id_rsa.pub (содержимое файла) в список авторизованных ключей на сервер 192.168.1.1 (добавление строки в файл /root/.ssh/authorized_keys), к которому необходим беспарольный доступ
При вводе этой команды будет первый и последний запрос пароля сервера, в следующий раз ввод пароля не понадобится:
cat /root/.ssh/id_rsa.pub | ssh root@192.168.1.1 "cat - >> ~/.ssh/authorized_keys"
Теперь можем заходить на сервер SSH без пароля
ssh root@192.168.1.1
Неинтерактивная парольная аутентификация sshpass
Установка
yum install sshpass
Использование
sshpass -p "password" ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user$host
sshpass -p "password" ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user@host 'df -h' > /home/user/log.txt
Аутентификация по ключам + монтирование SSHFS
Создайте точку монтирования, скажем, папку local в домашней директории
cd ~
mkdir local
Монтируем
sshfs user@192.168.1.1:/home/data /home/local
Заметьте, монтирование происходит от имени обычного юзера (нет sudo перед командой монтирования)
здесь:
user - это имя пользователя на удаленной машине
192.168.1.1 - IP удаленного компьютера
/home/data - директория на удаленном компьютере
/home/serhiy/local - точка монтирования на компьютере пользователя, куда будет монтирована /home/data.
После этого должно появиться приглашение
The authenticity of host '192.168.1.1 (192.168.1.1)' can't be established. RSA key fingerprint is 28:a2:c5:8c:93:db:3c:95:1c:e0:90:c8:71:7f:53:43. Are you sure you want to continue connecting (yes/no)? yes alien@192.168.1.1's password:
Введите пароль пользователя user
Заходим в /home/local, гды вы должны увидеть содержимое /home/data удаленного компьютера.
Если после ввода пароля Вы увидите запись
fusermount: failed to open /dev/fuse: Permission denied
Это может быть связано с багом fuse. Для решения этой проблемы измените группу файла /dev/fuse на fuse:
sudo chgrp fuse /dev/fuse
Отмонтировать
fusermount -u ~/local
После запуска команды на монтирование приходится вводить пароль SSH (если вы не настроили доступ по ключам до этого). Это не очень удобно. Поэтому, для большего удобства, настроим соединение с помощью ключей. Для этого на компьютере пользователя:
cd ~
ssh-keygen -t rsa
Generating public/private rsa key pair. Enter file in which to save the key (/home/user/.ssh/id_rsa):ENTER Enter passphrase (empty for no passphrase): ENTER Enter same passphrase again: ENTER 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: fa:e7:7c:e1:cb:7b:66:8b:67:07:05:99:7f:05:b9:4a
Ключи были созданы в папке .ssh. После этого нужно добавить ключ id_rsa.pub в список авторизованных ключей на сервер:
cat ~/.ssh/id_rsa.pub | ssh user@192.168.1.1 "cat - >> .ssh/authorized_keys"
Теперь можно подключиться к удаленному серверу, указав путь к паре ключей (id_rsa / id_rsa.pub)
ssh -i /root/rsa/id_rsa root@10.52.31.1
Таймаут при подключении
ssh -o ConnectTimeout=10 host
Логи авторизации SSH
last
lastlog
/var/log/secure
Записи о неудачных попытках входа по SSH находятся в файлах /var/log/secure*. Достать их от туда можно так:
cat /var/log/secure* | grep 'Failed password' | grep sshd | awk '{print $1,$2}' | sort -k 1,1M -k 2n | uniq -c
Не отображать WARNING: в консоли при подключении
ssh -q <HOST>
ServerAliveCountMax
Sets the number of server alive messages (see below) which may be
sent without ssh(1) receiving any messages back from the server.
If this threshold is reached while server alive messages are
being sent, ssh will disconnect from the server, terminating the
session. It is important to note that the use of server alive
messages is very different from TCPKeepAlive (below). The server
alive messages are sent through the encrypted channel and there‐
fore will not be spoofable. The TCP keepalive option enabled by
TCPKeepAlive is spoofable. The server alive mechanism is valu‐
able when the client or server depend on knowing when a connec‐
tion has become inactive.
The default value is 3. If, for example, ServerAliveInterval
(see below) is set to 15 and ServerAliveCountMax is left at the
default, if the server becomes unresponsive, ssh will disconnect
after approximately 45 seconds. This option applies to protocol
version 2 only.
ServerAliveInterval
Sets a timeout interval in seconds after which if no data has
been received from the server, ssh(1) will send a message through
the encrypted channel to request a response from the server. The
default is 0, indicating that these messages will not be sent to
the server. This option applies to protocol version 2 only.
Ошибка
Oct 16 08:59:45 openstack sshd[1214]: error: Could not load host key: /etc/ssh/ssh_host_rsa_key
Oct 16 08:59:45 openstack sshd[1214]: error: Could not load host key: /etc/ssh/ssh_host_dsa_key
Oct 16 08:59:45 openstack sshd[1214]: error: Could not load host key: /etc/ssh/ssh_host_ecdsa_key
Oct 16 08:59:45 openstack sshd[1214]: fatal: No supported key exchange algorithms [preauth]
Решение
Создаются ключи ssh в /etc/ssh/
sudo dpkg-reconfigure openssh-server
Выполнить многострочную команду на удаленном сервере через подключение по SSH
Одиночные кавычки вокруг 'HERE' нужны для того, чтобы можно было объявлять переменные командами на сервере SSH, иначе можно будет только использовать переменные объявленные на клиенте SSH
#!/bin/bash sshpass -p 'dispersia85D' ssh root@192.168.199.250 /bin/bash << 'HERE' uname -a; echo $?; echo "$SHELL"; uname -a; /sbin/sysctl kern.disks; exit; HERE
Одновременное использование локальных или удаленных переменных
Вызов локальной переменной: echo ${var1}
Вызов удаленной переменной: echo \${var1}
var1="111"
sshpass -p 'PassWord#1' ssh root@192.168.199.250 /bin/bash << HERE
var2="222";
uname -a;
echo $?;
echo "$SHELL";
echo "\$SHELL";
uname -a;
/sbin/sysctl kern.disks;
echo ${var1}
echo \${var2}
exit;
HERE
Не выводить предупреждение
If this file doesn't exist, just create it
nano ~/.ssh/config
-OR-
nano /etc/ssh/ssh_config
... Host * StrictHostKeyChecking no
Удалить хост из known_hosts
ssh-keygen -f "/home/cless/.ssh/known_hosts" -R 192.168.15.12