45 lines
915 B
Nix
45 lines
915 B
Nix
|
{ 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";
|
||
|
};
|
||
|
Install = {
|
||
|
WantedBy = [ "default.target" ];
|
||
|
};
|
||
|
};
|
||
|
}
|