Человекоподобный робот: копаемся в мозгах

Вспомнил, зачем мне понадобился рутовый доступ к Android: оказывается, я хотел включить на нём демона sshd интереса ради и, вероятно, для опытов. Поуправлять, так сказать, своим телефоном дистанционно и\или без помощи рук. Поскольку у меня CyanogenMod 10.1, искомый демон там есть по умолчанию, осталось его только настроить.
Инструкцию взял с этой страницы, а также модифицированной версии  и несколько адаптировал:

  • Подключаемся к телефону с помощью adb и переключаемся в рута:
adb shell
shell@android:/ $ su
shell@android:/ #

  • Редактируем конфигурацию sshd
shell@android:/ # vi /data/ssh/sshd_config 

  • Вставляем туда нужный текст
# Minimal OpenSSH daemon configuration for CyanogenMod 10.1+
AuthorizedKeysFile /data/ssh/authorized_keys
ChallengeResponseAuthentication no
PasswordAuthentication no
PermitRootLogin without-password
Subsystem sftp internal-sftp
pidfile /data/ssh/sshd.pid

  •  Создаём, если ещё не существует файл доверенных ключей:
shell@android:/ # touch /data/ssh/authorized_keys

  • ssh сервер на Android должен иметь свои ключи для работы. Создим их:
shell@android:/ # ssh-keygen -A
 
  • Устанавливаем правильные права на файлы конфигурации:
shell@android:/ # chmod 600 /data/ssh/authorized_keys                          
shell@android:/ # chmod 644 /data/ssh/sshd_config

  • Копируем с локального компьютера публичный ключ ~/.ssh/id_rsa.pub на телефон, чтобы сервер мог ему доверять при подключении:
shell@android:/ # vi /data/ssh/authorized_keys

  • Посмотреть ip-адрес телефона:
shell@android:/ # ifconfig wlan0 
wlan0: ip 10.236.32.30 mask 255.255.254.0 flags [up broadcast running multicast] 

  •  Запустить sshd на Android: 
shell@android:/ #/system/bin/sshd -d

  • Проверяем работоспособность подключения по ssh к телефону:
localhost$ ssh root@10.236.32.30
lastlog_openseek: Couldn't stat /var/log/lastlog: No such file or directory
lastlog_openseek: Couldn't stat /var/log/lastlog: No such file or directory
debug1: permanently_set_uid: 0/0
Environment:
  USER=root
  LOGNAME=root
  HOME=/
  PATH=/sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin
  MAIL=/var/mail/root
  SHELL=/system/bin/sh
  SSH_CLIENT=10.236.32.76 57753 22
  SSH_CONNECTION=10.236.32.76 57753 10.236.32.30 22
  SSH_TTY=/dev/ptmx
  TERM=xterm-256color 

  • Для настройки автоматического запуска демона при старте системы создадим запускающий скрипт:
shell@android:/ # vi /data/ssh/sshd_start.sh

  • Добавляем туда содержание: 
#!/system/bin/sh
umask 077
# DEBUG=1
#
# Generate rsa1, rsa, dsa and ecdsa host keys, if not already existing
ssh-keygen -A
if [ "1" == "$DEBUG" ] ; then
# run sshd in debug mode and capture output to logcat
/system/bin/logwrapper /system/bin/sshd -D -d
else
# don't daemonize - otherwise we can't stop the sshd service
/system/bin/sshd -D
fi

  • Завершаем настройку:
shell@android:/ # chmod 755 /data/ssh/sshd_start.sh
shell@android:/ # mkdir -p /data/local/userinit.d
shell@android:/ # ln -s /data/ssh/sshd_start.sh /data/local/userinit.d/90sshd
Если к телефону нужно подключаться более чем с одного компьютера,- необходимо с каждого из них скопировать публичные ключи на телефон в файл /data/ssh/authorized_keys с помощью vi, например.