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 192.168.1.20
$ 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 remote-user@192.168.1.20 ...
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/
Post-torrent-download script
Create a script, and put it anywhere you’d like. I put mine in /usr/local/bin/after-torrent-downloaded.sh
$ 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.
Transmission configuration
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
Change "script-torrent-done-enabled": false,
to "script-torrent-done-enabled": true,
Change "script-torrent-done-filename": ""
to "script-torrent-done-filename": "/usr/local/bin/after-torrent-downloaded.sh"
or whatever the path is to your script.
Save 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.