{ pkgs, config, ... }: let sshotp = pkgs.writeScriptBin "sshotp" '' #!/usr/bin/env expect set stty_init -echo set timeout 300 set totp [lindex $argv 0]; puts "Our TOTP $totp" spawn ssh -D 20000 dresden.uio.no expect { -re {.*(Verification_Code):} { send -- "$totp\r" exp_continue } -re {.*dresden.*} { wait } } ''; ssh-dresden = pkgs.writeShellApplication { name = "ssh-dresden"; runtimeInputs = [ pkgs.rbw pkgs.expect ]; text = '' #!/usr/bin/env bash totp=$(rbw get -f "TOTP" rlogin) expect -f ${sshotp}/bin/sshotp "$totp" ''; }; in { systemd.user.services.ssh-office = { Unit = { Description = "Office ssh session"; }; Service = { Type = "simple"; ExecStart = "${ssh-dresden}/bin/ssh-dresden"; Restart = "never"; }; }; }