На локальном компьютере генерируем пару ключей, публичный и приватный командой:
ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa
Задаём пароль для шифрования ключа (!обязательно)
-t указывает тип шифрования
-b длину ключа
-f имя и место сохранения (id_rsa по умолчанию!)
Копируем публичный ключ (id_rsa.pub) на удалённый сервер для возможности подключаться:
ssh-copy-id -i ~/.ssh/id_rsa.pub user@machine
Файл ключа будет скопирован в конец расположенного на сервере файла
$HOME/.ssh/authorized_keys
Для авторизации только по ключу без возможности входа по паролю на удалённой машине в /etc/ssh/sshd_config делаем:
PasswordAuthentication no
Что бы при каждом подключении не вводить пароль ключа
ssh-add ~/.ssh/id_rsa
sudo apt install ssh-agent ssh-add ksshaskpass
В ~/.bash_profile добавляем:
eval $(ssh-agent)
export SSH_ASKPASS=/usr/bin/ksshaskpass
Создаем скрипт для автозапуска при загрузке KDE
sudo nano ~/.config/autostart-scripts/ssh-add.sh
Следующего содержания:
#!/bin/sh
ssh-add $HOME/.ssh/key1 $HOME/.ssh/key2 $HOME/.ssh/key3 </dev/null
Где key1 key2 key3 имена ключей.
wiki.archlinux.org/index.php/KDE_Wallet
http://pashazz.github.io/blog/2015/11/08/ssh-agent-kde/
http://estan.dose.se/2016/04/ssh-agent-kwallet-pam-ssh-add-and-ksshaskpass-under-plasma
Для автоматического ввода пароля от ключа SSH соединения из коммандной строки для подключения к SSH на пример из скрипта, используем:
sudo apt install expect
Создаем файл /usr/bin/exp следующего содержания:
#!/usr/bin/expect
set timeout 20
set cmd [lrange $argv 1 end]
set password [lindex $argv 0]
eval spawn $cmd
expect "passphrase for key"
send "$password\r";
interact
Даем права на выполнение:
sudo chmox +x /usr/bin/exp
Используем:
exp <пароль> ssh <параметры подключения>
Для автоматического входа по паролю из коммандной строки, есть пакет sshpass
Установка: sudo apt install sshpass
Использование:
sshpass -p <пароль> ssh <параметры подключения>