Saturday, December 20, 2014

SSH Daemon on a Mac

A Mac is a weird thing that doesn't always know whether it wants to be BSD or Linux.

Enable Remote Login
You should only need to enable remote login:
$ sudo systemsetup -setremotelogin on

If the above doesn't work, here is the magical incantation to start a SSH Server:
$ sudo launchctl start /System/Library/LaunchDaemons/ssh.plist

One can then check it with a Telnet client:
$ telnet localhost ssh 
 Trying ::1... 
 Connected to localhost. Escape character is '^]'. 
 SSH-2.0-OpenSSH_6.2 ^] 
 telnet> q 
 Connection closed. 

Now you can use scp and ssh from another machine on the LAN, but one needs to know what the IP address is:
$ ifconfig en0 | grep inet 
inet6 fe80::5626:96ff:fece:371f%en0 prefixlen 64 scopeid 0x4 
inet 192.168.1.5 netmask 0xffffff00 broadcast 192.168.1.255

Run SSHD On A Different Port

If you want to allow internet access to your Mac and don't want to be bothered by script kiddies all the time, then you need to change sshd to a different port. 

The Mac launchctl system seems to ignore the /etc/sshd_conf file.  The only way that I could convince it to run on a different port, was by editing the /etc/services file and then reloading sshd with launchctl.

$ sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
$ sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
 

This will automatically change the firewall port also.  


SSHD Won't Run After Reboot
Verify that /System/Library/LaunchDaemons/ssh.plist exist and make sure <key>Disabled</key> is not set to <true/>. Also make sure it starts on boot every time with <key>RunAtLoad</key> set to <true/>:
....
<dict>
    <key>Disabled</key>
    <false/>
    <key>RunAtLoad</key>
    <true/>
    <key>Label</key>
    <string>com.openssh.sshd</string>
....

Then run the following to make sure the new settings stick:

sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist


La voila!


No comments:

Post a Comment

On topic comments are welcome. Junk will be deleted.