我已经创建了一个 SSH 非 root/非超级用户,并且授权密钥远程登录到我的服务器并将其关闭,但是,我尝试使用以下command=""
语法在 authorized_key 文件中执行此操作
我有以下内容授权密钥文件
command="shutdown -p now",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa
然而,当尝试执行 ssh 登录时,虽然用户能够登录......但命令似乎没有执行。
在authorized_keys中使用命令的正确语法是什么?
no-port-forwarding、no-x11-forwarding 等如何影响用户使用命令远程登录的能力?
命令
/usr/bin/ssh -2 -i /path/to/.ssh/rsa -p 22 -vvv -l user xxx.xxx.0.25
调试信息
debug2: we sent a publickey packet, wait for reply
debug1: Server accepts key: pkalg ssh-rsa blen 279
debug2: input_userauth_pk_ok: fp
// REMOVED
debug3: sign_and_send_pubkey: RSA
// REMOVED
debug1: key_parse_private_pem: PEM_read_PrivateKey failed
debug1: read PEM private key done: type <unknown>
Saving password to keychain failed
debug3: Incorrect RSA1 identifier
debug1: read PEM private key done: type RSA
Identity added: /.... //removed
(/.../.ssh/shutdown_rsa) // removed
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).
Authenticated to xxx.xxx.0.25 ([xxx.xxx.0.25]:22). //removed
debug1: channel 0: new [client-session]
debug3: ssh_session2_open: channel_new: 0
debug2: channel 0: send open
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug1: client_input_global_request: rtype [email protected] want_reply 0
debug2: callback start
debug2: fd 3 setting TCP_NODELAY
debug3: packet_set_tos: set IP_TOS 0x10
debug2: client_session2_setup: id 0
debug2: channel 0: request pty-req confirm 1
debug1: Sending environment.
debug3: Ignored env TERM_PROGRAM
debug3: Ignored env SHELL
debug3: Ignored env TERM
debug3: Ignored env TMPDIR
debug3: Ignored env Apple_PubSub_Socket_Render
debug3: Ignored env TERM_PROGRAM_VERSION
debug3: Ignored env TERM_SESSION_ID
debug3: Ignored env USER
debug3: Ignored env SSH_AUTH_SOCK
debug3: Ignored env __CF_USER_TEXT_ENCODING
debug3: Ignored env PATH
debug3: Ignored env PWD
debug3: Ignored env XPC_FLAGS
debug3: Ignored env XPC_SERVICE_NAME
debug3: Ignored env SHLVL
debug3: Ignored env HOME
debug3: Ignored env LOGNAME
debug1: Sending env LC_CTYPE = UTF-8
debug2: channel 0: request env confirm 0
debug3: Ignored env DISPLAY
debug3: Ignored env SECURITYSESSIONID
debug3: Ignored env _
debug2: channel 0: request shell confirm 1
debug2: callback done
答案1
autorhized_keys 中的指令“command”不会执行指定的命令,它只允许用户使用此密钥定期运行此特定命令。
答案2
两种猜测:
协议 2 公钥由以下部分组成:选项、密钥类型、base64 编码密钥、注释
我没有在您的authorized_keys文件中看到base-64编码的密钥。
Identity added: /.... //removed
(/.../.ssh/shutdown_rsa) // removed
您提供的是多把钥匙吗?您的 -vvv 不完整 您遗漏了有关提供哪把钥匙的重要信息。例如,
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /Users/Kendall/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Server accepts key: pkalg ssh-rsa blen 279
答案3
我也遇到了同样的情况。一切都已准备就绪,但我仍可以正常登录,无需执行任何特定命令。直到我通过添加-v
详细模式仔细检查了 ssh 客户端正在使用的身份后,问题才得以解决。我意识到它正在使用来自的缓存密钥ssh-agent
,我必须先将其终止。该设置确实没有太多神奇之处。
答案4
提供的命令始终不带参数执行。环境变量SSH2_ORIGINAL_COMMAND
包含用户输入的命令。
您可以在此处查阅文档:https://support.ssh.com/manuals/server-admin/64/ssh-server-g3.html
命令=“命令”
这用于指定在用户通过身份验证后将在服务器端执行的“强制命令”,而不是其他任何命令。用户提供的命令(如果有)放在环境变量 SSH2_ORIGINAL_COMMAND 中。如果连接请求 pty,则该命令在 pty 上运行;否则,它将在不使用 tty 的情况下运行。如果使用反斜杠转义,则可以在命令中使用引号。
此选项可用于限制某些公钥仅执行特定操作。例如,一个密钥允许远程备份,但不允许执行其他任何操作。请注意,客户端可以指定 TCP/IP 和/或 X11 转发,除非它们被明确拒绝(请参阅下面的 no-port-forwarding 和 no-x11-forwarding)。
如果在 ssh-server-config.xml 文件中明确允许终端,则仅当用户尝试运行远程命令时才会运行强制命令。如果用户请求 shell,则可以正常获取,并且不会运行强制命令。
如果在 ssh-server-config.xml 文件中定义了强制命令,它将覆盖授权文件中的任何命令。配置文件也可能只允许特定命令,或拒绝所有远程命令。这些限制也适用于授权文件中的命令。
有关配置文件中的命令限制的详细信息,请参阅命令。