Содержание

SSH

openssh

Чтобы отключиться от зависшей SSH сессии необходимо нажать последовательно на клавиатуре (Ввод,тильда,точка): [Enter], [~], [.]

Конфигурация сервера

/etc/ssh/sshd_config

AllowGroups sudo  #разрешить подключаться только группе sudo

Туннель

Из сети в мир

ssh -f -N -R 2222:10.11.12.13:22 username@99.88.77.66

теперь введя на хосте 99.88.77.66:

ssh -p2222 localhost

мы попадём на хост 10.11.12.13.

Таким-же образом можно получить доступ к любому другому ресурсу, например:

ssh -f -N -R 2080:10.11.12.14:80 username@99.88.77.66

Введя на хосте 99.88.77.66:

w3m -dump http://localhost:2080

получим дамп web-ресурса на 10.11.12.14.

Из мира в сеть

ssh -f -N -L 4080:192.168.0.10:80 nameuser@88.77.66.55

Аналогично, вводим на своём хосте:

w3m -dump http://localhost:4080

и получаем доступ к web-ресурсу узла 192.168.0.10, который находится за хостом 88.77.66.55.

SSH тунели - http://habrahabr.ru/post/81607/

Вход по ключу

Генерируем ключ на том сервере под тем пользователем от которого будем входить по ключу:

ssh-keygen -C "$(whoami)@$(hostname)-$(date -I)"

И копируем его на удалённую систему куда будем заходить и под каким пользователем (без параметра -i скопирует все публичные ключи из ~/.ssh/):

ssh-copy-id -i ~/.ssh/ansible_rsa ansible@server

или

cat ~/.ssh/id_rsa.pub | ssh ansible@server "mkdir -p ~/.ssh && cat >>  ~/.ssh/authorized_keys"

Подключиться с указанием ключа:

ssh -i ~/.ssh/id_rsa ansible@server

Смена пути для authorized_keys

AuthorizedKeysFile если не задан в /etc/ssh/sshd_config, то имеет значение по умолчанию: %h/.ssh/authorized_keys

На сервере куда будем подключаться с помощью ключа.
Вместо ~/.ssh/authorized_keys установить /etc/ssh/%u/authorized_keys:

echo AuthorizedKeysFile /etc/ssh/%u/authorized_keys | sudo tee -a /etc/ssh/sshd_config

ssh-copy-id при этом будет копировать ключ в ~/.ssh/authorized_keys
Поэтому необходимо ключ переносить с помощью scp
/etc/ssh/%u/authorized_keys - права на файл 600, должен принадлежать пользователю под которым идёт подключению.

Вход по учётным данным

ssh $host -o 'IdentitiesOnly=yes'

Хэш публичного ключа в .ssh/known_hosts

Удалить хэш определённого хоста:

ssh-keygen -R $HOST

Добавлять хэш без запроса для новых хостов:

ssh $host -o 'StrictHostKeyChecking accept-new'

Добавлять хэш без запроса для всех хостов (не рекомендуется):

ssh $host -o 'StrictHostKeyChecking no'

Не добавлять хэш в файл .ssh/known_hosts:

ssh $host -o 'UserKnownHostsFile /dev/null'

https://habr.com/ru/post/421477/ - Что записано в файле .ssh/known_hosts

Приветствие

Для полного приветствия устанавливаем:

sudo apt-get install landscape-common update-notifier-common

Вид landsacpe-common:

  System information as of Thu Sep 11 13:40:20 YEKT 2014

  System load:  0.29               Processes:             292
  Usage of /:   68.8% of 27.74GB   Users logged in:       1
  Memory usage: 10%                IP address for eth1:   192.168.203.5
  Swap usage:   0%                 IP address for xenbr0: 192.168.10.110

  Graph this data and manage this system at:
    https://landscape.canonical.com/

Вид update-notifier-common:

6 packages can be updated.
6 updates are security updates.

Шифрование

Доступное шифрование на сервере:

nmap --script ssh2-enum-algos -sV -p 22 localhost

Твики

nohup — UNIX-утилита, запускающая указанную команду с игнорированием сигналов потери связи (hangup)таким образом, команда будет продолжать выполняться в фоновом режиме и после того, как пользователь выйдет из системы.

nohup command -parm &

Запуск GUI Приложения

Отправим всплывающее графическое сообщение (notify-send), которое будет показано на экране удаленного компьютера :

ssh 192.168.0.100 'DISPLAY=:0 nohup notify-send "Hello" "World"'

Запустим музыкальный плеер (rhythmbox) на удаленном компьютере :

ssh 192.168.0.100 'DISPLAY=:0 nohup rhythmbox ./Smoke-on-the-Water.mp3'

http://www.shellhacks.com/ru/Zapusk-Graficheskih-Prilozheniy-na-Udalennom-Kompyutera-s-pomoshchyu-SSH

keep alive sessions

Отправить нулевой пакет каждые 300 секунд (5 минут) до 2 неудачных попыток:

на клиенте в ~/.ssh/config (или для всех пользователей /etc/ssh/ssh_config):

Host *
  ServerAliveInterval 300
  ServerAliveCountMax 2

на сервере в /etc/ssh/sshd_config:

ClientAliveInterval 300
ClientAliveCountMax 2

https://patrickmn.com/aside/how-to-keep-alive-ssh-sessions/

tar

https://www.cyberciti.biz/faq/howto-use-tar-command-through-network-over-ssh-session/

Windows

Установить с github

ssh.ps1

ssh.ps1

$SSHPORT=2222
function ssh($SSHPORT){
  $SSHURL="https://github.com/PowerShell/Win32-OpenSSH/releases/download/v8.9.1.0p1-Beta/OpenSSH-Win64.zip"
  $SSHCONFIG="$env:PROGRAMDATA\ssh\sshd_config"
  [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
  (New-Object net.webclient).Downloadfile($SSHURL, "$env:TEMP\OpenSSH.zip")
  Expand-Archive -LiteralPath $env:TEMP\OpenSSH.zip -DestinationPath $env:PROGRAMFILES -Force
  Rename-Item -Path $env:PROGRAMFILES\OpenSSH-Win64 -NewName $env:PROGRAMFILES\OpenSSH
  powershell -File $env:PROGRAMFILES\OpenSSH\install-sshd.ps1
  if (!($SSHPORT)){$SSHPORT=22}
  New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort $SSHPORT
  Start-Service -Name "sshd"
  (Get-Content $SSHCONFIG) -replace '^[#\s]*Port\s+.*' , "Port $SSHPORT" | Set-Content $SSHCONFIG
  (Get-Content $SSHCONFIG) -replace '^[#\s]*LoginGraceTime\s+.*' , 'LoginGraceTime 2m' | Set-Content $SSHCONFIG
  (Get-Content $SSHCONFIG) -replace '^[#\s]*MaxAuthTries\s+.*' , 'MaxAuthTries 3' | Set-Content $SSHCONFIG
  (Get-Content $SSHCONFIG) -replace '^[#\s]*PubkeyAuthentication\s+.*' , 'PubkeyAuthentication yes' | Set-Content $SSHCONFIG
  (Get-Content $SSHCONFIG) -replace '^[#\s]*UseDNS\s+.*' , 'UseDNS no' | Set-Content $SSHCONFIG
  (Get-Content $SSHCONFIG) -replace '^(\s*Match Group.*)' , '#$1' | Set-Content $SSHCONFIG
  (Get-Content $SSHCONFIG) -replace '^(\s*AuthorizedKeysFile.*)' , '#$1' | Set-Content $SSHCONFIG
  Set-Service -Name "sshd" -StartupType Automatic
  Restart-Service -Name "sshd"
}
ssh $SSHPORT


ssh-copy-id

type %userprofile%\.ssh\id_rsa.pub | ssh username@hostname "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys"

Копировать ключ и установить вход только по ключу

ssh $host powershell -command 'New-Item "$env:USERPROFILE\.ssh" -type directory -Force'
scp ~/.ssh/id_rsa.pub $host:.ssh/authorized_keys
ssh $host powershell -command '(Get-Item "$env:USERPROFILE\.ssh").Attributes += \"Hidden\"'
ssh $host powershell -command \"'(Get-Content "$env:PROGRAMDATA\ssh\sshd_config") -replace \"^[#\s]*PasswordAuthentication\s+.*\" , \"PasswordAuthentication no\" | Set-Content "$env:PROGRAMDATA\ssh\sshd_config"; Restart-Service -Name "sshd"'\"

Восстановить права на authorized_keys

icacls $env:USERPROFILE\.ssh\authorized_keys /reset 
icacls $env:USERPROFILE\.ssh\authorized_keys /grant SYSTEM:F
icacls $env:USERPROFILE\.ssh\authorized_keys /grant $env:USERNAME":F"
icacls $env:USERPROFILE\.ssh\authorized_keys /inheritance:r

Пути

$currentPath = [Environment]::GetEnvironmentVariable("PATH", "Machine")
[Environment]::SetEnvironmentVariable("PATH", "$currentPath;$env:PROGRAMFILES\OpenSSH;$env:PROGRAMFILES\OpenSSH-Win64", "Machine")

Shell

Установить оболочку по умолчанию powershell:

reg ADD "HKLM\SOFTWARE\OpenSSH" /v DefaultShell /t REG_SZ /d "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" /f

или

New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force

Ошибки

no matching host key type found

При подключении:

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

Решение:

ssh -oHostKeyAlgorithms=+ssh-rsa $IP

no mutual signature supported

При подключении по ключу:

sign_and_send_pubkey: no mutual signature supported

Решение:

ssh -oPubkeyAcceptedKeyTypes=ssh-rsa $IP
#или
ssh -oHostKeyAlgorithms=ssh-rsa $IP