Use HomeBrew to install fuse4x and sshfs
The commands to install are:
brew install sshfs
when you run it, it gives two other commands that I needed to run in order to install the fuse4x kernel extension. Run them.
Then, to mount the ssh filesystem
mkdir ~/mymountdir
sshfs username@hostname:/home/thedir ~/mymountdir
it will ask you for your password.
The best way to do this is to create a chroot jail for the user. I'll clean up the answer here when I get home but I posted the solution on my blog.
https://thefragens.com/chrootd-sftp-on-mac-os-x-server/
Below are most of the instruction from the above post.
First, you should create the new user in Workgroup Admin and either assign them access privileges for SSH via Server Admin or assign them to a group that has SSH access privileges. Further discussion is below.
From the Terminal, start off right.
sudo cp /etc/sshd_config /etc/sshd_config.bkup
sudo chown root /
sudo chmod 755 /
sudo mkdir -p /chroot/user/scratchpad
sudo chown -R root /chroot
sudo chown user /chroot/user/scratchpad
sudo chmod -R 755 /chroot
Every additional new user added will then be something along the lines of the following.
sudo mkdir -p /chroot/user2/scratchpad
sudo chown root /chroot/user2
sudo chown user2 /chroot/user2/scratchpad
sudo chmod -R 755 /chroot/user2
Every folder it the path to the chroot jail must be owned by root
. I don't think it matters what group the folder is in. What I did above was to
- backup
/etc/sshd_config
- change ownership of the root directory to
root
- change permissions of the root directory to 755
- create a chroot folder
- create a user folder inside the chroot folder
- create a folder inside the user folder that user can modify
- set ownership and permissions
Now to edit /etc/sshd_config
to the following.
#Subsystem sftp /usr/libexec/sftp-server
Subsystem sftp internal-sftp
Match User user
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
ChrootDirectory /chroot/user
This creates a chroot jail that when the user logs in will drop them into the folder /chroot/user
, in that folder is a folder they can add things to /chroot/user/scratchpad
.
If you want to create a Group in Workgroup Admin for 'Chroot Users' then add the new users that you created in Workgroup Admin to the Group you won't have to keep editing the /etc/sshd_config
file. Instead of the above, add the following. Make sure you add the 'Chroot Users' group to the SSH access ACL in Server Admin.
Match Group chrootusers
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
ChrootDirectory /chroot/%u
To test whether the above is working, issue the following from the terminal.
$ sftp user@domain.com
Password:
sftp>
Best Answer
It’s not clear what you gain by preventing log in, but I’ll assume you’ve for a good reason to complicate things.
Removing “other” from the graphical login screen is easy to do and easy to reverse on Catalina and below. Same with ssh, it’s easy to change the log in method and show the username/password or put back “other“.
If you can’t prevent a person with those credentials from sitting in front of the Mac, the first thing that comes to mind is you make a log in item that is a script that logs them out. It will be difficult for them to fix that if you deny them any other credentials to that Mac.
To ssh, you need a home folder and the system to have credentials to validate the password and assign UID/GID etc..
You can set up LDAP or use a network server and have remote accounts, but the design isn’t likely to work for your case or make sense logistically.
The matrix covers the differences between where a home folder is stored and how local versus network server vs external account validation happens.
The other easy way to have ssh log in without any chance of GUI log in or compromising security is a container. Fire up Docker for Mac and your ssh container is well isolated from the local user accounts.