AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / ubuntu / Perguntas / 1542025
Accepted
SebMa
SebMa
Asked: 2025-02-22 01:28:42 +0800 CST2025-02-22 01:28:42 +0800 CST 2025-02-22 01:28:42 +0800 CST

Como usar o agente openssh systemd usuário "ssh-agent.service"?

  • 772

Estou tentando usar o serviço de usuário systemd do agente ssh openssh no Ubuntu 24.04.

A partir do Ubuntu 16.10 em diante, o openssh-clientpacote contém um ssh-agent.servicearquivo de serviço do usuário:

$ lsb_release -sr
No LSB modules are available.
24.04
$ dpkg -S user/ssh-agent.service
openssh-client: /usr/lib/systemd/user/ssh-agent.service
$ systemctl --user cat ssh-agent.service
# /usr/lib/systemd/user/ssh-agent.service
[Unit]
Description=OpenSSH Agent
Documentation=man:ssh-agent(1)
Before=graphical-session-pre.target
ConditionPathExists=/etc/X11/Xsession.options
Wants=dbus.socket
After=dbus.socket

[Service]
# If you need to pass extra arguments to ssh-agent, you can use "systemctl
# --user edit ssh-agent.service" to add a drop-in unit with contents along
# these lines:
#   [Service]
#   ExecStart=
#   ExecStart=/usr/lib/openssh/agent-launch start -- -t 1200
ExecStart=/usr/lib/openssh/agent-launch start
ExecStopPost=/usr/lib/openssh/agent-launch stop
$

Então tentei iniciá-lo, mas ele não está ativo:

$ systemctl --user start ssh-agent.service
$ systemctl --user is-active ssh-agent.service
inactive
$

Depois de alguma pesquisa, configurei a SSH_AUTH_SOCKvariável:

$ ssh myUbuntu-24-04-Server
$ export SSH_AUTH_SOCK=$XDG_RUNTIME_DIR/openssh_agent
$ systemctl --user stop ssh-agent.service
$ systemctl --user start ssh-agent.service
$ ls $SSH_AUTH_SOCK
ls: cannot access '/run/user/1000/openssh_agent': No such file or directory
$ systemctl --user is-active ssh-agent.service
inactive
$ systemctl --user status ssh-agent.service
○ ssh-agent.service - OpenSSH Agent
     Loaded: loaded (/usr/lib/systemd/user/ssh-agent.service; static)
     Active: inactive (dead)
       Docs: man:ssh-agent(1)

Feb 21 17:41:56 myUbuntu-24-04-Server systemd[118809]: Started ssh-agent.service - OpenSSH Agent.
Feb 21 18:08:15 myUbuntu-24-04-Server systemd[119096]: Started ssh-agent.service - OpenSSH Agent.
Feb 21 18:10:31 myUbuntu-24-04-Server systemd[119096]: Started ssh-agent.service - OpenSSH Agent.
Feb 21 18:11:24 myUbuntu-24-04-Server systemd[119096]: Started ssh-agent.service - OpenSSH Agent.
Feb 21 18:18:49 myUbuntu-24-04-Server systemd[119442]: Started ssh-agent.service - OpenSSH Agent.
$

Entretanto, este serviço inicia bem em um Ubuntu LTS anterior (22.04):

$ ssh myUbuntu-22-04-Server
$ lsb_release -sr
22.04
$ export SSH_AUTH_SOCK=$XDG_RUNTIME_DIR/openssh_agent
$ systemctl --user start ssh-agent.service
$ systemctl --user status ssh-agent.service
● ssh-agent.service - OpenSSH Agent
     Loaded: loaded (/usr/lib/systemd/user/ssh-agent.service; static)
     Active: active (running) since Fri 2025-02-21 18:40:55 CET; 4min 17s ago
       Docs: man:ssh-agent(1)
   Main PID: 23068 (ssh-agent)
      Tasks: 1 (limit: 19005)
     Memory: 1.1M
        CPU: 6ms
     CGroup: /user.slice/user-1000.slice/[email protected]/app.slice/ssh-agent.service
             └─23068 ssh-agent -D -a /run/user/1000/openssh_agent

Feb 21 18:40:55 myUbuntu-22-04-Server systemd[22133]: Started OpenSSH Agent.
Feb 21 18:40:55 myUbuntu-22-04-Server agent-launch[23070]: dbus-update-activation-environment: setting SSH_AUTH_SOCK=/run/user/1000/openssh_agent
Feb 21 18:40:55 myUbuntu-22-04-Server agent-launch[23070]: dbus-update-activation-environment: setting SSH_AGENT_LAUNCHER=openssh
Feb 21 18:40:55 myUbuntu-22-04-Server agent-launch[23068]: SSH_AUTH_SOCK=/run/user/1000/openssh_agent; export SSH_AUTH_SOCK;
Feb 21 18:40:55 myUbuntu-22-04-Server agent-launch[23068]: echo Agent pid 23068;
$ ssh-add -l
The agent has no identities.
$

EDIT0: Minha culpa, SSH_AUTH_SOCKnão foi necessário definir a variável manualmente.

Testei novamente no Ubuntu 22.04 e funciona bem sem definir a SSH_AUTH_SOCKvariável manualmente.

Mas no Ubuntu 24.04, aqui está o que eu recebo:

$ ssh -X myUser@myUbuntu-24-04-Server
myUser@myUbuntu-24-04-Server:~$ echo $XDG_RUNTIME_DIR
/run/user/1000
myUser@myUbuntu-24-04-Server:~$ echo $SSH_AUTH_SOCK

myUser@myUbuntu-24-04-Server:~$ grep use-ssh-agent /etc/X11/Xsession.options
use-ssh-agent
myUser@myUbuntu-24-04-Server:~$ unset SSH_AUTH_SOCK
myUser@myUbuntu-24-04-Server:~$ systemctl --user start ssh-agent.service
myUser@myUbuntu-24-04-Server:~$ systemctl --user status ssh-agent.service
○ ssh-agent.service - OpenSSH Agent
     Loaded: loaded (/usr/lib/systemd/user/ssh-agent.service; static)
     Active: inactive (dead)
       Docs: man:ssh-agent(1)

Feb 21 17:41:56 myUbuntu-24-04-Server systemd[118809]: Started ssh-agent.service - OpenSSH Agent.
Feb 21 18:08:15 myUbuntu-24-04-Server systemd[119096]: Started ssh-agent.service - OpenSSH Agent.
Feb 21 18:10:31 myUbuntu-24-04-Server systemd[119096]: Started ssh-agent.service - OpenSSH Agent.
Feb 21 18:11:24 myUbuntu-24-04-Server systemd[119096]: Started ssh-agent.service - OpenSSH Agent.
Feb 21 18:18:49 myUbuntu-24-04-Server systemd[119442]: Started ssh-agent.service - OpenSSH Agent.
Feb 24 17:54:39 myUbuntu-24-04-Server systemd[151016]: Started ssh-agent.service - OpenSSH Agent.
Feb 24 17:56:01 myUbuntu-24-04-Server systemd[151016]: Started ssh-agent.service - OpenSSH Agent.
Feb 24 18:15:38 myUbuntu-24-04-Server systemd[151355]: Started ssh-agent.service - OpenSSH Agent.
Feb 24 18:17:06 myUbuntu-24-04-Server systemd[151355]: Started ssh-agent.service - OpenSSH Agent.
myUser@myUbuntu-24-04-Server:~$ systemctl --user is-active ssh-agent.service
inactive
myUser@myUbuntu-24-04-Server:~$ ssh-add -l
Could not open a connection to your authentication agent. 
myUser@myUbuntu-24-04-Server:~$ 

Pode me ajudar ?

24.04
  • 1 1 respostas
  • 114 Views

1 respostas

  • Voted
  1. Best Answer
    mpboden
    2025-02-23T00:55:54+08:002025-02-23T00:55:54+08:00

    O motivo pelo qual o serviço não está "Ativo" é por vários motivos:

    1. Você não use-ssh-agentdefiniu em /etc/X11/Xsession.options.
    2. Você definiu $SSH_AUTH_SOCKantes de começar ssh-agent.service.
    3. SSH_AUTH_SOCKtambém é definido dentro do escopo Systemd --user por gpg-agent-ssh.socket.

    Vamos primeiro olhar para o ssh-agent.servicearquivo unit. Quando a unidade é iniciada, o script /usr/lib/openssh/agent-launché chamado pela seguinte linha:

    ExecStart=/usr/lib/openssh/agent-launch start
    

    Olhando para esse script, temos o seguinte:

    $ cat /usr/lib/openssh/agent-launch
    #!/bin/sh
    # helper script for launching ssh-agent, used by systemd unit
    set -e
    
    if [ ! -d "$XDG_RUNTIME_DIR" ]; then
        # shellcheck disable=SC2016
        echo 'This needs $XDG_RUNTIME_DIR to be set' >&2
        exit 1
    fi
    
    if [ "$1" = start ]; then
        if [ -z "$SSH_AUTH_SOCK" ] && grep -s -q '^use-ssh-agent$' /etc/X11/Xsession.options; then
            S="$XDG_RUNTIME_DIR/openssh_agent"
            dbus-update-activation-environment --verbose --systemd SSH_AUTH_SOCK="$S" SSH_AGENT_LAUNCHER=openssh
            exec ssh-agent -D -a "$S"
        fi
    elif [ "$1" = stop ]; then
        if [ "$SSH_AGENT_LAUNCHER" = openssh ]; then
            dbus-update-activation-environment --systemd  SSH_AUTH_SOCK=
        fi
    else
        echo "Unknown command $1" >&2
        exit 1
    fi
    

    Podemos extrair algumas coisas disto:

    1. $XDG_RUNTIME_DIRprecisa ser definido como uma variável de ambiente
    2. $SSH_AUTH_SOCKprecisa ser indefinido
    3. use-ssh-agentprecisa ser definido em/etc/X11/Xsession.options

    Em seguida, observe a saída de systemctl --user show-environment. Isso mostrará suas variáveis ​​de ambiente de escopo Systemd --user:

    $ systemctl --user show-environment
    HOME=/home/mike
    LANG=en_US.UTF-8
    LOGNAME=mike
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/>
    SHELL=/bin/bash
    USER=mike
    XDG_RUNTIME_DIR=/run/user/1000
    XDG_DATA_DIRS=/usr/local/share/:/usr/share/:/var/lib/snapd/desktop
    DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
    GSM_SKIP_SSH_AGENT_WORKAROUND=true
    SSH_AUTH_SOCK=/run/user/1000/gnupg/S.gpg-agent.ssh
    

    Observe que SSH_AUTH_SOCKis defined. Isso impedirá ssh-agent.serviceque essa variável seja iniciada e definida.

    Quando ssh-agenté executado, ele quer definir SSH_AUTH_SOCK. Citando a página de manual ssh-agent(1) :

    SSH_AUTH_SOCK  When ssh-agent starts, it creates a UNIX-domain socket and stores its pathname in this
                        variable.  It is accessible only to the current user, but is easily abused by root or
                        another instance of the same user.
    

    De qualquer forma, no estado padrão do Ubuntu 24.04, SSH_AUTH_SOCKé definido a partir de um arquivo de unidade de soquete chamado gpg-agent-ssh.socket, e é por isso que ele está disponível no escopo Systemd --user e visível na saída de systemctl --user show-environment. Dê uma olhada no conteúdo do gpg-agent-ssh.socketarquivo de unidade e você verá como SSH_AUTH_SOCKé definido com ExecStartPost=:

    $ systemctl --user cat gpg-agent-ssh.socket
    # /usr/lib/systemd/user/gpg-agent-ssh.socket
    [Unit]
    Description=GnuPG cryptographic agent (ssh-agent emulation)
    Documentation=man:gpg-agent(1) man:ssh-add(1) man:ssh-agent(1) man:ssh(1)
    
    [Socket]
    ListenStream=%t/gnupg/S.gpg-agent.ssh
    
    # See the below link for why we need GSM_SKIP_SSH_AGENT_WORKAROUND:
    # https://git.gnome.org/browse/gnome-session/tree/gnome-session/main.c?h=3.24.0#n419
    # in order to avoid race condition this environment should be set before SSH_AUTH_SOCK
    ExecStartPre=systemctl --user set-environment GSM_SKIP_SSH_AGENT_WORKAROUND="true"
    
    # after creating and binding the service notify environment
    # no need to test config file because service directly pass fd overwritting the config file
    ExecStartPost=systemctl --user set-environment SSH_AUTH_SOCK="%t/gnupg/S.gpg-agent.ssh"
    
    # before unbinding stop to export that we listen to socket
    ExecStopPre=systemctl --user unset-environment SSH_AUTH_SOCK
    ExecStopPost=systemctl --user unset-environment GSM_SKIP_SSH_AGENT_WORKAROUND
    
    FileDescriptorName=ssh
    Service=gpg-agent.service
    SocketMode=0600
    DirectoryMode=0700
    
    [Install]
    WantedBy=sockets.target
    

    A correção

    Para habilitar o Ubuntu 24.04, ssh-agentvocê precisa fazer o seguinte:

    1. Defina use-ssh-agentem /etc/X11/Xsession.options:

      $ cat /etc/X11/Xsession.options
      use-ssh-agent
      
    2. Impedir SSH_AUTH_SOCKque seja definido no escopo Systemd --user na inicialização por gpg-agent-ssh.socket. Isso pode ser feito por qualquer uma das seguintes opções:

      Opção 1:

      Crie um override.confarquivo que limpe ExecStartPre, ExecStartPost, ExecStopPre, e ExecStopPostcom as seguintes etapas:

      • Execute systemctl --user edit gpg-agent-ssh.socketpara editar e criar um override.confarquivo. Adicione o seguinte:

        [Socket]
        ExecStartPre=
        ExecStartPost=
        ExecStopPre=
        ExecStopPost=
        
      • Salvar e sair.

      • Em seguida, recarregue as alterações de configuração com systemctl --user daemon-reload.

      Opção 2:

      Simplesmente mask gpg-agent-ssh.socket. Isso evitará que o socket seja criado.

      • Correr systemctl --user mask gpg-agent-ssh.socket.

      • Em seguida, recarregue as alterações de configuração com systemctl --user daemon-reload.

    3. Desconfigurado SSH_AUTH_SOCKno escopo Systemd --user, que foi definido anteriormente com gpg-agent-ssh.socketo arquivo unit. Você precisa desconfigurar isso antes de iniciar ssh-agent.service:

      systemctl --user unset-environment SSH_AUTH_SOCK`
      
    4. Adicione uma [Install]seção em um override.confarquivo para ssh-agent.service. Isso permitirá que você "habilite" o serviço e o faça iniciar na inicialização.

      $ systemctl --user edit ssh-agent
      [Install}
      WantedBy=default.target
      

      Em seguida, recarregue as alterações de configuração com systemctl --user daemon-reload.

    5. Habilitar e iniciarssh-agent.service

      systemctl --user enable --now ssh-agent
      
    6. Exportar SSH_AUTH_SOCKpara .bashrcque essa variável de ambiente esteja disponível globalmente. Caso contrário, ssh-addnão verá um socket disponível, pois não pode ver as variáveis ​​de escopo Systemd --user.

      • Adicione o seguinte ao final de .bashrc:

        export SSH_AUTH_SOCK="${XDG_RUNTIME_DIR}/openssh_agent"

      • Então recarregue .bashrc:

        source ~/.bashrc
        

    Após a configuração acima:

    • Você terá uma SSH_AUTH_SOCKvariável global:

      $ echo $SSH_AUTH_SOCK
      /run/user/1000/openssh_agent
      
    • Isso corresponderá à variável de escopo --user do Systemd:

      $ systemctl --user show-environment
      HOME=/home/mike
      LANG=en_US.UTF-8
      LOGNAME=mike
      PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/>
      SHELL=/bin/bash
      USER=mike
      XDG_RUNTIME_DIR=/run/user/1000
      XDG_DATA_DIRS=/usr/local/share/:/usr/share/:/var/lib/snapd/desktop
      DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
      SSH_AGENT_LAUNCHER=openssh
      SSH_AUTH_SOCK=/run/user/1000/openssh_agent
      
    • ssh-agentserá habilitado e ativo (em execução):

      $ systemctl --user status ssh-agent
      ● ssh-agent.service - OpenSSH Agent
           Loaded: loaded (/usr/lib/systemd/user/ssh-agent.service; enabled; preset: enabled)
          Drop-In: /home/mike/.config/systemd/user/ssh-agent.service.d
                   └─override.conf
           Active: active (running) since Wed 2025-02-26 05:43:00 UTC; 4min 12s ago
             Docs: man:ssh-agent(1)
         Main PID: 1513 (ssh-agent)
            Tasks: 1 (limit: 9327)
           Memory: 1.1M (peak: 1.4M)
              CPU: 12ms
           CGroup: /user.slice/user-1000.slice/[email protected]/app.slice/ssh-agent.service
                   └─1513 ssh-agent -D -a /run/user/1000/openssh_agent
      
      Feb 26 05:43:00 ubuntu24server systemd[1158]: Started ssh-agent.service - OpenSSH Agent.
      Feb 26 05:43:00 ubuntu24server agent-launch[1516]: dbus-update-activation-environment: setting SSH_A>
      Feb 26 05:43:00 ubuntu24server agent-launch[1516]: dbus-update-activation-environment: setting SSH_A>
      Feb 26 05:43:00 ubuntu24server agent-launch[1513]: SSH_AUTH_SOCK=/run/user/1000/openssh_agent; expor>
      Feb 26 05:43:00 ubuntu24server agent-launch[1513]: echo Agent pid 1513;
      
    • A saída de ssh-add -lnão apresentará erro:

      $ ssh-add -l
      The agent has no identities.
      
    • 1

relate perguntas

  • Problemas ao instalar 24.04

  • Nenhum clique pode ser feito em todo o canto superior direito de um aplicativo maximizado no Ubuntu 24.04

  • Tenho uma dúvida sobre como baixar a versão do Ubuntu entre LTS e básica

  • 24.04 Textos LTS não aparecem até passar o mouse

  • A boutique de software não pode ser iniciada no Ubuntu24.04 LTS

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve