Setting up users for file transfer
The Transmission installation creates a
debian-transmission user and group to run the daemon. It’s done this way to limit the risks if someone gains access to the user (through a Transmission bug, for example). This means the
debian-transmission user is going to be the one executing the post-download script. The only way I’m aware of for transferring files to another machine while maintaining the restricted nature of the user is to create a similarly minimally priviledged user on the remote system, as the recipient of the files.
Assuming you’re using
debian-transmission and you’ve created a corresponding user on the other machine – we’ll call them
remote-user, you’ll want to set up an SSH key pair with the remote machine. For me, that was
$ sudo mkdir /var/lib/transmission-daemon/.ssh $ sudo ssh-keygen -f /var/lib/transmission-daemon/.ssh/id_rsa Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /var/lib/transmission-daemon/.ssh/id_rsa. Your public key has been saved in /var/lib/transmission-daemon/.ssh/id_rsa.pub. ... $ ssh-copy-id -i /var/lib/transmission-daemon/.ssh/id_rsa email@example.com ...
Now, you need to do a little dance to get the
known_hosts folder to be populated. I don’t know of a better way to do this, but here’s what I did:
$ sudo su # ssh-keyscan 192.168.1.80 >>/var/lib/transmission-daemon/.ssh/known_hosts ... # exit
Then change the permissions so that
debian-transmission owns everything.
$ sudo chown -R debian-transmission:debian-transmission /var/lib/transmission-daemon/
Create a script, and put it anywhere you’d like. I put mine in
$ sudo touch /usr/local/bin/after-torrent-downloaded.sh $ sudo chown debian-transmission:debian-transmission after-torrent-downloaded.sh $ sudo chmod +x after-torrent-downloaded.sh
For our purposes, there are two important environment variables transmission exposes (see https://trac.transmissionbt.com/wiki/Scripts)
TR_TORRENT_DIR – the absolute directory path and
TR_TORRENT_NAME – the torrent’s name. With all this done, the script is completely trivial. This is mine:
USERNAME=remote-user HOST=192.168.1.20 TARGET_DIRECTORY=/home/remote-user/files scp -r "$TR_TORRENT_DIR/$TR_TORRENT_NAME" $USERNAME@$HOST:"$TARGET_DIRECTORY"
Note: This relies on the target directory (
/home/remote-user/files) already existing – if it doesn’t, make it.
Note: The client should be closed before making changes, otherwise settings will be reverted to it’s previous state.
First thing first, find out where the configuration file you’re going to be change is, see the transmission wiki. For me it was in the
/var/lib/transmission-daemon/.config folder. In terms of changes to be made, there’s another wiki page. The
settings.json is the one we need, and there are only two values we need to worry about.
$ sudo nano /var/lib/transmission-daemon/.config/transmission-daemon/settings.json
"script-torrent-done-enabled": false, to
"script-torrent-done-filename": "" to
"script-torrent-done-filename": "/usr/local/bin/after-torrent-downloaded.sh" or whatever the path is to your script.
settings.json and make Transmission respect your changes with:
$ killall -HUP transmission-daemon
That’s all there is to it!
Try downloading a torrent, and when it’s completed take a look at the Transmission logs:
$ sudo journalctl -u transmission-daemon.service
Every time a torrent finishes, it should be copied to the configured remote server.