Interaktiv SSH-session: Undgå fejlen "Must be connected to a terminal" ved login

Hvordan kan der opnås en interaktiv SSH-session, hvor en specifik kommando køres ved login, uden at få fejlen "Must be connected to a terminal"?

For at opnå en interaktiv SSH-session, hvor en specifik kommando køres ved login uden at få fejlen "Must be connected to a terminal", kan du bruge SSH-flaget -t, tilføje kommandoen i .bashrc, bruge dobbelt -t, anvende et expect script eller konfigurere SSH-serveren korrekt.

Hvordan kan der opnås en interaktiv SSH-session, hvor en specifik kommando køres ved login, uden at få fejlen "Must be connected to a terminal"?

For at opnå en interaktiv SSH-session, hvor en specifik kommando køres ved login uden at få fejlen "Must be connected to a terminal", kan du følge disse trin:

  • Brug ssh -t flaget: SSH-flaget -t tvinger tildeling af en pseudo-terminal, hvilket er nødvendigt for at køre interaktive kommandoer. Eksempel:
    ssh -t user@hostname 'kommando'
  • Tilføj kommandoen i .bashrc: Hvis du vil køre en specifik kommando hver gang du logger ind, kan du tilføje den til din .bashrc fil. Sørg for at tjekke, om sessionen er interaktiv:
    if [[ $- == *i* ]]; then
      kommando
    fi
  • Brug ssh -tt for dobbelt terminal: I nogle tilfælde kan det være nødvendigt at bruge dobbelt -t for at sikre, at en terminal tildeles korrekt:
    ssh -tt user@hostname 'kommando'
  • Brug expect script: expect er et værktøj, der kan automatisere interaktive applikationer. Du kan skrive et script til at håndtere login og kommandoeksekvering:
    #!/usr/bin/expect
    spawn ssh user@hostname
    expect "password:"
    send "your_password\r"
    expect "$ "
    send "kommando\r"
    interact
  • Konfigurer SSH-serveren: Sørg for, at SSH-serveren er konfigureret til at tillade pseudo-terminaler. Dette kan gøres ved at sikre, at PermitTTY er sat til yes i /etc/ssh/sshd_config:
    PermitTTY yes

Ved at følge disse trin kan du sikre, at en specifik kommando køres ved login i en interaktiv SSH-session uden at støde på fejlen "Must be connected to a terminal".