Apple - Unable to ssh root@localhost on jailbroken iPad with iOS 8.1
A much better alternative than to run Prompt as root, is to create another sshd
instance listening to a port above 1024.
In this example I have used port 10022.
- Copy
/Library/LaunchDaemons/com.openssh.sshd.plist
to/Library/LaunchDaemons/com.openssh.sshd2.plist
Change the
Label
and theSockServiceName
incom.openssh.sshd2.plist
by appending 2 tossh
/sshd
:com.openssh.sshd
->com.openssh.sshd2
ssh
->ssh2
Add the following lines to
/etc/services
:
ssh2 10022/udp # SSH Remote Login Protocol ssh2 10022/tcp # SSH Remote Login Protocol
Differences for iOS versions:
iOS 12.1.2 / unc0ver, iOS 13.3.1 / checkra1n:
- from this answer choice #2.
- copy the plist as above, but change the
SockServiceName
incom.openssh.sshd2.plist
fromssh
to simply the new port number10022
. The section will look like this:
<key>Sockets</key>
<dict>
<key>Listeners</key>
<dict>
<key>SockServiceName</key>
<string>10022</string>
</dict>
</dict>
iOS 12.4 / chimera.sh
- don't copy the plist file
- instead, edit
/etc/ssh/sshd_config
as root. Details from this article - remove the comment in front of
Port 22
- add another line beneath for
Port 10022
All iOS versions:
- Reboot the device (or
launchctl load com.openssh.sshd2.plist
if you do not want to reboot) - Connect via port 10022 instead of 22
If you have installed bash
, coreutils
and sed
you can automate it with this script:
#!/bin/bash
cd /Library/LaunchDaemons
cp com.openssh.sshd{,2}.plist
sed -i'' '/<key>Label<\/key>/{N;s/sshd/sshd2/}' com.openssh.sshd2.plist
sed -i'' '/<key>SockServiceName<\/key>/{N;s/ssh/ssh2/}' com.openssh.sshd2.plist
cd /etc
if ! grep ssh2 services; then
cat >> services <<EOF
ssh2 10022/udp # SSH Remote Login Protocol
ssh2 10022/tcp # SSH Remote Login Protocol
EOF
fi
The reason is because iOS 7 and 8 sandbox the apps from the App Store. The easiest workaround is below (adapted from http://blog.funroll.co/ios-7-jailbreak-enable-ssh-to-localhost)
- Install OpenSSH via Cydia
- Get on the same wifi network as your Mac
- Grab your IP address from Settings -> Wifi -> (i) icon
- Open Terminal on your mac and ssh root@
- Default password is alpine. Use passwd to change if you haven't yet
- set a login password for the mobile username if you haven't yet
passwd mobile
go to the Application directory
cd /var/mobile/Containers/Bundle/Application/ <-- iOS 8
cd /var/mobile/Applications <-- iOS 7
find Prompt!
ls ./*/*/Prompt*
This will give you something like
./3EE7B167-AF7B-497B-9C8E-EAC96F4AF0D9/Prompt 2.app/Prompt 2
move Prompt!
mv "./3EE7B167-AF7B-497B-9C8E-EAC96F4AF0D9/Prompt 2.app" /Applications/
(Use your own path, instead of 3EE7B167-AF7B-497B-9C8E-EAC96F4AF0D9)
You may alsochown root:admin -R /Applications/Prompt\ 2
.- Go to the home screen of the device and delete the icon for Prompt
- Reboot by holding home and sleep/wake until you see the Apple icon
- ssh back into the device using ssh mobile@(your-ip-here). (Use the password you created in step 6.)
- Run uicache: su -c uicache mobile
- Go back to the home screen and launch Prompt (if it does not let you connect to localhost, reboot the device again)
- Enter the ip as 127.0.0.1 or localhost, username root or mobile as per your preference. I use root so I don't have to sudo excessively.
- Connect and enjoy a high quality user experience ssh'ing to localhost
- Use Panic Sync to restore your settings (keys and servers)!