Restart rport through a tunnel
How to restart the rport client safely when connected via tunnel
Last updated
How to restart the rport client safely when connected via tunnel
Last updated
You want to restart the rport client, but you are connected via a tunnel (RDP, VNC or SSH). If you just execute a restart command, you will kill the current connection and the restart is also killed halfway. The client will not reconnect.
You must restart the client with a small delay from a background process. This is done best from the rport script interface.
On Linux, execute the following script:
if [ "$(id -u)" -ne 0 ];then
echo "Not root. Please enable sudo";
exit 1
fi
if which at >/dev/null 2>&1; then
echo "$RESTART_CMD" | at now +1 minute
echo "Restart of rport scheduled via atd."
else
nohup sh -c "sleep 10;$RESTART_CMD" >/dev/null 2>&1 &
echo "Restart of rport scheduled via nohup+sleep."
fi
Make sure, you enable sudo.
On Windows, a few more lines of PowerShell are required to execute a task in the background. Execute the following script to safely restart rport.
function Invoke-Later {
Param
(
[Parameter(Mandatory = $true)]
[string] $ScriptBlock,
[Parameter(Mandatory = $false)]
[int] $Delay = 10,
[Parameter(Mandatory = $false)]
[string] $Description = "Background Task"
)
$taskName = 'Invoke-Later-' + (Get-Random)
$taskFile = [System.Environment]::GetEnvironmentVariable('TEMP', 'Machine') + '\' + $taskName + '.ps1'
$ScriptBlock.Split("`n") | ForEach-Object {
if ($_)
{
$_.Trim() | Out-File -FilePath $taskFile -Append
}
}
"Unregister-ScheduledTask -Taskname $( $taskName ) -Confirm:`$false" | Out-File -FilePath $taskFile -Append
"Remove-Item `"$( $taskFile )`" -Force" | Out-File -FilePath $taskFile -Append
$action = New-ScheduledTaskAction -Execute "powershell" -Argument "-ExecutionPolicy bypass -file $( $taskFile )"
$trigger = New-ScheduledTaskTrigger -Once -At (Get-Date).AddSeconds($Delay)
$principal = New-ScheduledTaskPrincipal -UserID "NT AUTHORITY\SYSTEM" -LogonType ServiceAccount -RunLevel Highest
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries
$task = New-ScheduledTask -Action $action -Principal $principal -Trigger $trigger -Settings $settings
Register-ScheduledTask $taskName -InputObject $task
Write-Output "* Task `"$( $Description )`" [$( $taskFile )] scheduled."
Write-Output " It will be executed within $( $Delay ) seconds."
}
Invoke-Later -Description "Restart RPort" -Delay 10 -ScriptBlock {
Stop-Service rport
Start-Service rport
}
Make sure you execute the script with PowerShell.