Организовать запуск ssh сервера только из загрузочного образа возможно, хотя и достаточно витиеватыми путями. Для этого потребуется создать файловую систему в RAM памяти (/dev/shmem для этих целей не подойдёт) и отредактировать файл построения.
Для работы sshd требуется сервис random, поэтому перед запуском сервера вставьте команду:
random -t -p &
Затем вам потребуется организовать RAM диск и создать в нем каталог /var/chroot/sshd.
Пример команд в загрузочном образе (секция файла построения [+script] startup.script = )
#######################################################################
## Start sshd from image
#######################################################################
display_msg Preparing RAM disk and starting sshd...
devf-ram -e -m /ramfs &
waitfor /dev/fs0 5
flashctl -p /dev/fs0p0 -e -f -n /ramfs -m
waitfor /ramfs
mkdir -p /ramfs/var/chroot/sshd
chmod 700 /ramfs/var/chroot/sshd
mkdir -p /ramfs/root
chmod 700 /ramfs/root
/proc/boot/start_sshd
#######################################################################
Явно запустить сервер sshd не получится, для этого подойдёт скрипт который можно определить прямо в образе (секция файла построения[data=c] ):
[perms=700] /proc/boot/start_sshd = {
/usr/sbin/sshd
}
Затем вам потребуется добавить запись в файл /etc/passwd. Например, так:
/etc/passwd = {
root::0:0:Superuser:/root:/bin/sh
sshd:x:15:6:sshd:/var/chroot/sshd:/bin/false
}
Для работы sshd необходим ряд файлов с ключами и конфигурационный файл sshd_config. Ключи необходимо подготовить заранее либо на инструментальной машине, либо на целевой, как вам удобнее.
Пример команд:
# ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ''
# ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N ''
Если систем много и они тиражируются, стоит организовать генерацию различных ключей для каждой системы, например с указанием какой-либо различающейся строки в параметре -N ''.
Конфигурационный файл sshd_config отредактируйте под свои задачи.
Для входа по ключу пропишите строки:
PubkeyAuthentication yes
AuthorizedKeysFile /etc/ssh/ssh_known_hosts
Чтобы разрешить удалённое подключение пользвателю root, если это требуется:
PermitRootLogin yes
Если потребуется подключение от пользователей, то необходимо прописать их в файле /etc/passwd в составе образа.
В файл ssh_known_hosts добавьте открытый ключ той системы с которой вы в дальнейшем будете удалённо подключаться. Обычно он хранится в файле $HOME/.ssh/id_rsa.pub
В итоге у вас должно получиться несколько файлов. Для удобства сборки образа можно сохранить их в одном каталоге, например ssh
$ ls ./ssh
sshd_config ssh_host_dsa_key ssh_host_dsa_key.pub ssh_host_rsa_key ssh_host_rsa_key.pub ssh_known_hosts
В файле построения пропишите
###########################################################################
## SSH
###########################################################################
[type=link] /var/chroot/sshd=/ramfs/var/chroot/sshd
[type=link] /usr/sbin/sshd=/proc/boot/sshd
[perms=600] /etc/ssh/sshd_config=../../ssh/sshd_config
[perms=600] /etc/ssh/ssh_host_dsa_key=../../ssh/ssh_host_dsa_key
[perms=600] /etc/ssh/ssh_host_rsa_key=../../ssh/ssh_host_rsa_key
[perms=644 gid=0 uid=0] /etc/ssh/ssh_known_hosts=../../ssh/ssh_known_hosts
[perms=755] sshd
[perms=755] /usr/bin/sftp=sftp
[perms=755] /usr/libexec/sftp-server=${QNX_TARGET}/${PROCESSOR}/usr/libexec/sftp-server
[perms=755] /usr/libexec/ssh-keysign=${QNX_TARGET}/${PROCESSOR}/usr/libexec/ssh-keysign
[type=link] /root=/ramfs/root
Если в SFTP нет необходимости, то строчки sftp, sftp-server и ssh-keysign можно удалить.
В sshd сервер явно зашита переменная с путями PATH, поэтому для удобства работы можно её явно переопределить с помощью /etc/profile. Например, так:
/etc/profile= {
PATH=/proc/boot:/bin:/sbin:/usr/bin:/usr/sbin
}
В результате, если все действия выполнены корректно, то будет работать удалённое подключение к целевой системе с QNX по ssh:
Или из файлового менеджера: sftp://root@192.168.1.70/