在允许某些命令的同时阻止交互式 SSH 会话

Ime*_*ime 3 ssh

如何只允许某些命令通过 SSH 运行并阻止交互式会话?

rsync.net 和 bakop.com 一样。

即这将工作:

ssh <user@host> mkdir test
scp <file> <user@host>:test/
Run Code Online (Sandbox Code Playgroud)

这不会:

ssh <user@host>
Run Code Online (Sandbox Code Playgroud)

use*_*517 9

您可以利用command=authorized_keys 中的指令和SSH_ORIGINAL_COMMAND传递给远程系统的变量,将密钥限制为特定命令。

在authorized_keys 文件中,将包含相关密钥的行从

ssh-rsa AAAAB3NzaC1yc...
Run Code Online (Sandbox Code Playgroud)

command="/path/to/myscript" ssh-rsa AAAAB3NzaC1yc...
Run Code Online (Sandbox Code Playgroud)

然后创建 myscript 文件,例如

#!/bin/bash

if [  ! -n "$SSH_ORIGINAL_COMMAND" ]
then
    echo "No command supplied"
    exit 1
fi


set $SSH_ORIGINAL_COMMAND

case "$1" in
    ls)
      ;;
    md5)
      ;;
    *)
      echo "invalid command"
      exit 1
      ;;
esac

    exec "$@"
Run Code Online (Sandbox Code Playgroud)

所以现在如果你运行ssh user@remote.tld ls /etc你会得到远程/etc目录的列表。您可能希望使用 case 语句来测试提供的参数以满足您的任何实现要求。